Pluto_Rabbit's Blog

蒟蒻妹纸一枚,轻拍

【20150815 NOIP2015膜你赛】

Jacinth posted @ 2015年8月16日 16:32 in ZHOJ , 547 阅读

至今唯一一场做得还比较欢喜的考试QAQ

T1:LBN loves permutation

边上%%%线段树大师吐槽:lbn怎么还不来?

这题sb多打一个“=”号毁一生啊!!!!

于是我就光荣地错了第一个subtask然后42,联赛千万别脑抽,联赛千万别脑抽,联赛千万别脑抽

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;

char s[200];
int ls,n,tot;
int ans[150];
bool f[150];
bool ff;

void Print()
{
	for (int i=1;i<=tot;++i) printf("%d ",ans[i]);
	puts("");
	return;
}

void BFS(int xx,int yy)
{
	int tmp;
	if (xx>=ls)
	{
		if (f[yy]) 
		{
			if (yy!=0) ans[++tot]=yy;
			Print(),ff=1;
		}
		return;
	}
	if (ff) return;
	if (yy!=0)
	{
		tmp=yy*10+s[xx]-'0';
		if (f[tmp])
		{
			f[tmp]=0;
			ans[++tot]=tmp;
			BFS(xx+1,0);
			tot--;
			f[tmp]=1;
		}
	}
	tmp=s[xx]-'0';
	if (f[yy])
	{
		if (yy!=0) f[yy]=0,ans[++tot]=yy;
		BFS(xx+1,tmp);
		if (yy != 0) tot--;
		f[yy]=1;
	}
	return;
}

int main()
{
	freopen("pmt.in","r",stdin); freopen("pmt.out","w",stdout);
	while (cin.getline(s,150))
	{
		ls=strlen(s);
		if (ls<=9) 
		{
			for (int i=0;i<ls;++i)
				printf("%c ",s[i]);
			puts("");
			continue;
		}
		ff=0;
		n=(ls-9)/2+9;
		memset(f,0,sizeof(f));
		tot=0;
		memset(ans,0,sizeof(ans));
		for (int i=0;i<=n;++i) f[i]=1;
		BFS(0,0);
	}
	fclose(stdin); fclose(stdout);
	return 0;
}

应该能对了↑

T2:LBN loves chess

试了一个样例,就本能地只管大胆假设,绝不小心求证

事实证明竟然是对的!!!!窝的RP是都用在这上了吗QAQ

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#define INF 1000000100
using namespace std;

int n,xx,yy,tx,ty,maxx,maxy;
int x[1010],y[1010];

#define gch getchar

char C_get;
void read(int &x)
{
	for(x=0,C_get=gch();(C_get<'0'||C_get>'9')&&C_get!='-'&&C_get!='+';C_get=gch());
	if(C_get=='-')
		for(C_get=gch();C_get>='0'&&C_get<='9';C_get=gch())x=x*10-C_get+'0';
	else
	{
		if(C_get=='+')C_get=gch();
		for(;C_get>='0'&&C_get<='9';C_get=gch())x=x*10+C_get-'0';
	}
}

int main()
{
	freopen("chess.in","r",stdin); freopen("chess.out","w",stdout);
	while (scanf("%d",&n)!=EOF)
	{
		maxx=INF,maxy=INF;
		for (int i=1;i<=n;++i)
		{
			read(x[i]),read(y[i]);
			if (x[i]<maxx) maxx=x[i];
			if (y[i]<maxy) maxy=y[i];
		}
		xx=maxx/3;
		yy=maxy/3;
		tx=maxx%3;
		ty=maxx%3;
		if (tx==2) xx++;
		if (xx<=yy) puts("orzLYD");
		else puts("orzLBN");
	}
	fclose(stdin); fclose(stdout);
	return 0;
}

哎本来不应该给某些人看代码的。。←_←

T3:LBN loves game

SG函数没弄好怪我咯,0分爽是爽的

T4:LBN loves艹题

高能,看完题目和数据果断骗了19分

骗分程序

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#define INF 1000000100
using namespace std;

int n,k;

#define gch getchar
char C_get;
void read(int &x)
{
	for(x=0,C_get=gch();(C_get<'0'||C_get>'9')&&C_get!='-'&&C_get!='+';C_get=gch());
	if(C_get=='-')
		for(C_get=gch();C_get>='0'&&C_get<='9';C_get=gch())x=x*10-C_get+'0';
	else
	{
		if(C_get=='+')C_get=gch();
		for(;C_get>='0'&&C_get<='9';C_get=gch())x=x*10+C_get-'0';
	}
}

int main()
{
	freopen("caoti.in","r",stdin); freopen("caoti.out","w",stdout);
	while (scanf("%d%d",&n,&k)!=EOF)
	{
		if (k>(n*(n+1)/2))
		{
			printf("%d\n",n*(n+1)/2);
			puts("0");
		}
		if (k==0)
		{
			printf("%d\n",n);
			printf("%d\n",n-1);
			for (int i=1;i<n;++i) printf("%d ",i);
			puts("");
		}
	}
	fclose(stdin); fclose(stdout);
	return 0;
}

获得成就:首次rank 2