今天做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;
}