这是一个句子测试

12
4
2015
0

UOJ Round #10滚粗记

既然UOJ Easy Round是省选难度,那么请问不带Easy的是什么鬼?

当然我的Blog也出现了点意外,计数器君被drc刷爆了。

T1

诶这是什么神题,我怎么连30分都不会做。

哎呦原来只要可行解呀,这60分是送的呀,出题人送温暖啊。

那就打60分好了。

接着Gold_7AC此题,感到不明觉厉,于是撒了金坷垃打了正解。

如果x柱上的盘的权值在[l,r]之间,那么可以把[l,mid]放在y柱上,[mid+1,r]放在z柱上。

接着再对y、z柱上的盘分治,排序,然后移回来,那么x柱上的盘就完成了排序。

打完之后不停地WA。。。

然后发现数组开小了。。。(打Pascal的Debuff啊)

T2

交互题是什么不明觉厉的东西?

不会,弃坑。

T3

掐指一算,发现暴力拿不了20分。

弃疗了。。。

如果有丧病的OIer对T2或T3感兴趣的话请看链接:http://jiry_2.blog.uoj.ac/blog/1024

【Codes】

#include<cstdio>
#include<algorithm>
#include<cstring>
int n,i,x,ans;
int h[3][1000010];
int f[1000010][2];
using namespace std;
void sol(int l,int r,int p){
	if (l==r)return;
	int mid=l+r>>1;
	int x=(p+1)%3,y=(p+2)%3;
	for (i=h[p][0];i>=h[p][0]-r+l;i--)
		if (h[p][i]<=mid){
			f[++ans][0]=p,f[ans][1]=x;
			h[x][++h[x][0]]=h[p][i];	
		}else{
			f[++ans][0]=p,f[ans][1]=y;
			h[y][++h[y][0]]=h[p][i];
		}
	h[p][0]-=r-l+1;
	sol(l,mid,x);
	sol(mid+1,r,y);
	for (i=h[y][0];i>=h[y][0]-r+mid+1;i--)f[++ans][0]=y,f[ans][1]=x;
	for (i=h[y][0]-r+mid+1;i<=h[y][0];i++){
		f[++ans][0]=x,f[ans][1]=p;
		h[p][++h[p][0]]=h[y][i];
	}
	for (i=h[x][0];i>=h[x][0]-mid+l;i--)f[++ans][0]=x,f[ans][1]=y;
	for (i=h[x][0]-mid+l;i<=h[x][0];i++){
		f[++ans][0]=y,f[ans][1]=p;
		h[p][++h[p][0]]=h[y][i];
	}
	h[x][0]-=mid-l+1;
	h[y][0]-=r-mid;
}
int main(){
	scanf("%d",&n);
	for (i=1;i<=n;i++)scanf("%d",&x),h[0][++h[0][0]]=x;
	for (i=1;i<=n>>1;i++)swap(h[0][i],h[0][n-i+1]);
	sol(1,n,0);
	printf("%d\n",ans);
	for (i=1;i<=ans;i++)printf("%d %d\n",f[i][0]+1,f[i][1]+1);
}
Category: 蒟蒻的滚粗记 | Tags: | Read Count: 198

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com