BZOJ 1088 扫雷Mine
这道题纯粹吓人的,看完题发现总共就两列,最开始想一个个进行枚举,发现费时费力还过不了,后来仔细一看,只要枚举前两个格子的四种情况后面的就全出来了,中间加个判断不符合减一就行了,结果绝对小于等于4。
代码如下:
#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; int i_long; int i_nob[10000]; int i_lei[10000],ans=4; int main() { cin>>i_long; for(int i=1;i<=i_long;i++) { cin>>i_nob[i]; } for(int i=0;i<=1;i++) { for(int j=0;j<=1;j++) { i_lei[1]=i;i_lei[2]=j; for(int m=3;m<=i_long;m++) { i_lei[m]=i_nob[m-1]-i_lei[m-1]-i_lei[m-2]; } for(int n=1;n<=i_long;n++) { if(i_lei[n]<0||i_lei[n-1]+i_lei[n]+i_lei[n+1]!=i_nob[n]) { ans--; break; } } } } cout<<ans<<endl; return 0; }