今天做virtual ABBYY2.0 Eazy,D题死活没搞出来,自己出的数据都过了但就是WA在第4个点上。题不难,难在是否能把情况都考虑到,是否处理了所有情况,区间有重叠什么的。处理边界还有琐细的情况是我的弱项,常常自己觉得好像都考虑到了,又没有很大的把握。
赛后看xianxingwuguan和fubao的代码,感觉他们的处理方式简单而巧妙。利用普遍的性质来覆盖掉琐细的细节,就是可以不用考虑多种情况,反正都可以用哪个性质。
我觉得这是我需要加强的地方。
题目link:http://codeforces.com/contest/177/problem/D1
fubao的code:
int find(int i,int j)
{
if(i<0)
return num2[j];
return num2[j]-num2[i];
}
int main()
{
cin>>n>>m>>c;
for(int i=0;i<n;i++)
scanf("%d",num1+i);
for(int i=0;i<m;i++)
scanf("%d",num2+i);
for(int i=m;i<n;i++)
num2[i]=0;
for(int i=1;i<n;i++)
num2[i]+=num2[i-1];
for(int i=0;i<n;i++)
{
num1[i]+=find(i-(n-m+1),i);
num1[i]%=c;
}
for(int i=0;i<n;i++)
{
cout<<num1[i]<<" ";
}
cout<<"\n";
return 0;
}
xianxingwuguan 的code:
int main()
{
scanf("%d %d %d",&n,&m,&c);
for(int i=0;i<n;i++)
scanf("%d",a+i);
for(int i=0;i<m;i++)
scanf("%d",b+i);
for(int i=0;i<n;i++)
{
if(i<m)
t+=b[i];
if(i>n-m)
t-=b[i-n+m-1];
printf("%d ",(a[i]+t)%c);
}
return 0;
}