睿智题一个,考试时分24种类,分了1小时0分
#include <stdio.h> #include <math.h> int main() { int m,n,t; scanf("%d %d %d",&m,&n,&t); int c=0; int k=(m+1)*(n+1); int ch[k]; for(int i=0;i<=n;i++){ ch[i]=1; } // int f=0; // for(int i=0;i<=m*n;i+=n){ // ch[f*(n+1)]=1; // f++; // } for(int i=0;i<=m;i++){ ch[i*(n+1)]=1; } for(int i=0;i<t;i++){ int x,y; scanf("%d %d",&x,&y); if(x==1&&y==1){ c++; if(ch[2]==0){ c++; ch[2]=1; } if(ch[1+n]==0){ c++; ch[1+n]=1; } if(ch[2+n]==0){ c++; ch[2+n]=1; } } else if(x==1&&y==m){ c++; if(ch[n*(m-1)+1]==0){ ch[n*(m-1)+1]=1; c++; } if(ch[n*(m-1)+1-m]==0){ ch[n*(m-1)+1-m]=1; c++; } if(ch[n*(m-1)-m]==0){ ch[n*(m-1)-m]=1; c++; } } else if(x==n&&y==1){ c++; if(ch[m*(n-1)+1]==0){ ch[m*(n-1)+1]=1; c++; } if(ch[m*(n-1)+1-n]==0){ ch[m*(n-1)+1-n]=1; c++; } if(ch[m*(n-1)-n]==0){ ch[m*(n-1)-n]=1; c++; } } else if(x==n&&y==m){ c++; if(ch[m*n-1]==0){ ch[m*n-1]=1; c++; } if(ch[m*n-1-m]==0){ ch[m*n-1-m]=1; c++; } if(ch[m*n-m]==0){ ch[m*n-m]=1; c++; } } else if(x==1&&y>=2&&y<=m-1){ c++; if(ch[m*y+2]==0){ ch[m*y+2]=1; c++; } if(ch[m*y+1+m]==0){ ch[m*y+1+m]=1; c++; } if(ch[m*y+1-m]==0){ ch[m*y+1-m]=1; c++; } } else if(y==1&&x>=2&&x<=n-1){ c++; if(ch[x+1]==0){ ch[x+1]=1; c++; } if(ch[x-1]==0){ ch[x-1]=1; c++; } if(ch[x+m]==0){ ch[x+m]=1; c++; } } else if(x==n&&y>=2&&y<=m-1){ c++; if(ch[m*y+m-1]==0){ ch[m*y+m-1]=1; c++; } if(ch[m*y+2*m]==0){ ch[m*y+2*m]=1; c++; } if(ch[m*y]==0){ ch[m*y]=1; c++; } } else if(y==m&&2<=x&&x<=n-1){ c++; if(ch[y*(m-1)+x+1]==0){ ch[y*(m-1)+x+1]=1; c++; } if(ch[y*(m-1)+x-1]==0){ ch[y*(m-1)+x-1]=1; c++; } if(ch[y*(m-1)+x-m]==0){ ch[y*(m-1)+x-m]=1; c++; } } else{ c+=1; if(ch[m+m*y+1]==0){ ch[m+m*y+1]=1; c++; } if(ch[m+m*y-1]==0){ ch[m+m*y-1]=1; c++; } if(ch[m+m*y+m]==0){ ch[m+m*y+m]=1; c++; } if(ch[m+m*y-m]==0){ ch[m+m*y-m]=1; c++; } if(ch[m+m*y+1+m]==0){ ch[m+m*y+1+m]=1; c++; } if(ch[m+m*y+1-m]==0){ ch[m+m*y-1]=1; c++; } if(ch[m+m*y-1+m]==0){ ch[m+m*y-1+m]=1; c++; } if(ch[m+m*y-1-m]==0){ ch[m+m*y-1-m]=1; c++; } } } printf("%d",c); }
然而只要在判断灯亮不亮的时候判断数组越不越界就行了。100分代码
#include <stdio.h> #include <math.h> int main() { int m,n,t; scanf("%d %d %d",&m,&n,&t); int a[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ a[i][j]=0; } } int cnt=0; for(int i=0;i<t;i++){ int x,y; scanf("%d %d",&x,&y); int xx=x-1; int yy=y-1; if(a[xx][yy]==0){ a[xx][yy]=1; cnt++; } if(a[xx+1][yy]==0&&0<=xx+1&&xx+1<=m-1&&0<=yy&&yy<=n-1){ cnt++; a[xx+1][yy]=1; } if(a[xx-1][yy]==0&&0<=xx-1&&xx-1<=m-1&&0<=yy&&yy<=n-1){ cnt++; a[xx-1][yy]=1; } if(a[xx][yy+1]==0&&0<=xx&&xx<=m-1&&0<=yy+1&&yy+1<=n-1){ cnt++; a[xx][yy+1]=1; } if(a[xx][yy-1]==0&&0<=xx&&xx<=m-1&&0<=yy-1&&yy-1<=n-1){ cnt++; a[xx][yy-1]=1; } if(a[xx+1][yy+1]==0&&0<=xx+1&&xx+1<=m-1&&0<=yy+1&&yy+1<=n-1){ cnt++; a[xx+1][yy+1]=1; } if(a[xx+1][yy-1]==0&&0<=xx+1&&xx+1<=m-1&&0<=yy-1&&yy-1<=n-1){ cnt++; a[xx+1][yy-1]=1; } if(a[xx-1][yy+1]==0&&0<=xx-1&&xx-1<=m-1&&0<=yy+1&&yy+1<=n-1){ cnt++; a[xx-1][yy+1]=1; } if(a[xx-1][yy-1]==0&&0<=xx-1&&xx-1<=m-1&&0<=yy-1&&yy-1<=n-1){ cnt++; a[xx-1][yy-1]=1; } } printf("%d",cnt); }
呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜