真是一道神奇的题目233~
迫不得已贴了个题解的链接。。
好吧,这道题就是分情况讨论,纯模拟,,
没有什么难的。。
脑洞要大,四面都要考虑,不能漏!
#include<iostream> #include<cstdio> using namespace std; int c,p,ans; int l[101]; int absq(int a,int b){return a>b?a-b:b-a;} int main(){ freopen("game.in","r",stdin); freopen("game.out","w",stdout); scanf("%d%d",&c,&p); for(int i=1;i<=c;i++) scanf("%d",&l[i]); if(p==1){ ans+=c; for(int i=4;i<=c;i++) if((l[i]==l[i-1])&&(l[i-1]==l[i-2])&&(l[i-2]==l[i-3])) ans++; } else if(p==2){ for(int i=2;i<=c;i++) if(l[i]==l[i-1])ans++; } else if(p==3){ for(int i=2;i<=c;i++) if(l[i-1]-l[i]==1)ans++; for(int i=3;i<=c;i++) if(l[i-2]==l[i-1]&&l[i]-l[i-1]==1)ans++; } else if(p==4){ for(int i=2;i<=c;i++) if(l[i]-l[i-1]==1)ans++; for(int i=3;i<=c;i++) if(l[i-2]-l[i-1]==1&&l[i-1]==l[i])ans++; } else if(p==5){ for(int i=2;i<=c;i++) if(absq(l[i],l[i-1])==1)ans++; for(int i=3;i<=c;i++) if((l[i]==l[i-1])&&(l[i-1]==l[i-2]))ans++; for(int i=2;i<c;i++) if(l[i-1]-l[i]==1&&l[i+1]-l[i]==1)ans++; } else if(p==6){ for(int i=3;i<=c;i++) if((l[i]==l[i-1])&&l[i-1]==l[i-2])ans++; for(int i=2;i<=c;i++) if(l[i]==l[i-1])ans++; for(int i=3;i<=c;i++) if ((l[i-1]-l[i-2]==1)&&(l[i]==l[i-1]))ans++; for(int i=2;i<=c;i++) if (l[i-1]-l[i]==2)ans++; } else if(p==7){ for(int i=3;i<=c;i++) if((l[i]==l[i-1])&&l[i-1]==l[i-2])ans++; for(int i=2;i<=c;i++) if(l[i]==l[i-1])ans++; for(int i=3;i<=c;i++) if ((l[i-1]==l[i-2])&&(l[i-1]-l[i]==1))ans++; for(int i=2;i<=c;i++) if (l[i]-l[i-1]==2)ans++; } printf("%d ",ans); fclose(stdin); fclose(stdout); }