| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么我超时啊,哪个大哥帮我看看#include <iostream>
using namespace std;
int num[2][2000];
int nnum[2];
int B,nd,dig[101],T;
int backward(int k)
{
int dt=k%2;
int st=(dt+1)%2;
int pos=0;
int i;
num[dt][0]=dig[nd-1-k];
for (i=0;i<nnum[st];++i)
{
if (num[dt][pos]>num[st][i])
{
num[dt][pos+1]=num[st][i]+B-num[dt][pos];
if (i!=nnum[st]-1)
{
if (num[st][i+1]!=1) return -1;
}
++i;
++pos;
}
else
{
num[dt][pos+1]=num[st][i]-num[dt][pos];
++pos;
}
}
nnum[dt]=pos+1;
return 1;
}
void forward(int i,int T)
{
int dt,st;
int k;
st=i%2;
dt=(st+1)%2;
int pos;
int t;
for (k=2;k<=T;++k)
{
pos=0;
int j;
for (j=0;j<nnum[st]-1;++j)
{
t=num[st][j]+num[st][j+1];
if (t>=B)
{
num[dt][pos]=t%B;
num[dt][pos+1]=1;
pos+=2;
}
else
{
num[dt][pos]=t;
++pos;
}
}
nnum[dt]=pos;
if (nnum[dt]==1&&k!=T)
{
cout<<"unpredictable"<<endl;
return;
}
t=st;
st=dt;
dt=t;
}
cout<<num[st][0]<<endl;
return;
}
int main()
{
int N;
cin>>N;
while (N--)
{
cin>>B>>nd;
int i;
nnum[0]=nnum[1]=0;
for (i=0;i<nd;++i)
{
cin>>dig[i];
}
cin>>T;
num[0][0]=dig[nd-1];
nnum[0]=1;
int stop=0;
for (i=1;i<nd&&!stop;++i)
{
if (backward(i)==-1)
{
stop=1;
cout<<"impossible"<<endl;
}
}
if (nd==1&&T>1) cout<<"unpredictable"<<endl;
else
{
if (stop!=1)
{
--i;
forward(i,T);
}
}
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator