比赛 20101117 评测结果 EEEEEEEEEE
题目名称 拯救 最终得分 0
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-17 10:56:04
显示代码纯文本
#include <fstream>

#define I_F "savey.in"
#define O_F "savey.out"
#define MAX 1000

using namespace std;

short s[MAX];
short ans[MAX];
int n,na=1;

void Input();
void Exchange2();
void sum(short x[MAX], int xl);
void Exchange10();
void Output();

int main()
{
	Input();
	Exchange2();
	Exchange10();
	Output();
	return 0;
}

void Input()
{
	ifstream fin(I_F);
	fin>>n;
	for (int i=n-1; i>=0; fin>>s[i--]);
	fin.close();
}

void Exchange2()
{
	for (int i=1; i<n; i++)
		s[i]=s[i]^s[i-1];
}

void sum(short x[MAX], int xl)
{
	int i;
	for (i=0; i<xl; i++)
		ans[i]+=x[i];
	for (i=0; i<na-1; i++)
	{
		ans[i+1]+=(ans[i]/10);
		ans[i]%=10;
	}
	if (ans[na-1]>9)
		ans[na++]=1;
	ans[na-2]%=10;
}

void Exchange10()
{
	short t[MAX]={1};
	int tl=1,i,j;
	if (s[n-1]==1)
		ans[0]=1;
	for (i=n-2; i>=0; i--)
	{
		for (j=0; j<tl; t[j++]*=2);
		for (j=0; j<tl-1; j++)
		{
			t[j+1]+=(t[j]/10);
			t[j]%=10;
		}
		if (t[tl-1]>9)
			t[tl++]=1;
		t[tl-2]%=10;
		if (s[i]==1)
			sum(t,tl);
	}
}

void Output()
{
	ofstream fout(O_F);
	for (int i=na-1; i>=0; fout<<ans[i--]);
	fout<<'\n';
	fout.close();
}