比赛 |
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();
}