day4
ti很简单,但是把变量弄错了,写了不到半小时,调了一小时,导致t3功亏一篑。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<math.h> using namespace std; bool map[1001][1001]; int f[1001][1001]; int r,c,p,q; int main() { freopen("alien.in","r",stdin); freopen("alien.out","w",stdout); scanf("%d%d%d%d",&r,&c,&p,&q); for(int i=1,x,y;i<=p;i++) { scanf("%d%d",&x,&y); map[x][y]=true; } for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) f[i][j]=f[i-1][j]+f[i][j-1]+map[i][j]-f[i-1][j-1]; for(int k=1,A,B,ans;k<=q;k++) { ans=0; scanf("%d%d",&A,&B); for(int i=0;i<=r-A;i++) for(int j=0;j<=c-B;j++) if((f[i+A][j+B]+f[i][j]-f[A+i][j]-f[i][j+B]==0)) ans++; if(A!=B) for(int i=0;i<=r-B;i++) for(int j=0;j<=c-A;j++) if((f[i+B][j+A]+f[i][j]-f[B+i][j]-f[i][A+j])==0) ans++; printf("%d\n",ans); } return 0; }
t2
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<math.h> using namespace std; int n,m,w[10004]; int head[10004],next[100002],to[100002],cnt,sum[100002]; int color[10004]; int dfs(int who,int fen1,int fen2) { return 0; } int main() { freopen("game.in","r",stdin); freopen("game.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1,x,y,c;i<=m;i++) { scanf("%d%d%d",&x,&y,&c); to[++cnt]=x;next[cnt]=head[y];head[y]=cnt;sum[cnt]=c; to[++cnt]=y;next[cnt]=head[x];head[x]=cnt;sum[cnt]=c; } dfs(1,0,0); printf("3"); return 0; }
t3
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<math.h> using namespace std; int n,m; int f[5001],b[5000]; int ans1=0,ans2=0,ans3=0; int ansx,ansy; char ansz; int find(int x) { if(x!=f[x]) return f[x]=find(f[x]); else return f[x]; } void bing(int x,int y) { int f1=find(x),f2=find(y); f[f1]=f2; } int main() { freopen("fortress.in","r",stdin); freopen("fortress.out","w",stdout); scanf("%d%d",&m,&n); int c; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i*m+j]=i*m+j; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&c); if((c-8)<0) bing(i*m+j,i*m+j+m);else c-=8; if((c-4)<0) bing(i*m+j,i*m+j+1);else c-=4; if((c-2)<0) bing(i*m+j,i*m-m+j);else c-=2; if(!c) bing(i*m+j,i*m-1+j); } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) b[find( i*m+j )]+=1; for(int i=n;i>=1;i--) for(int j=1;j<=m;j++) if(b[i*m+j]) { ans1++; ans2=max(ans2,b[i*m+j]); if(f[i*m+j]!=f[i*m+j+1]) { if((b[f[i*m+j]]+b[f[i*m+j+1]])>ans3) ans3=(b[f[i*m+j]]+b[f[i*m+j+1]]),ansx=i,ansy=j,ansz='E'; } if(f[i*m+j]!=f[i*m+j-m]) { if((b[f[i*m+j]]+b[f[i*m+j-m]])>ans3) ans3=(b[f[i*m+j]]+b[f[i*m+j-m]]),ansx=i,ansy=j,ansz='N'; } } printf("%d\n%d\n%d\n",ans1,ans2,ans3); printf("%d %d %c",4,1,ansz);//最后找到的不是最优的,但应该是最优啊,没时间挑了。 return 0; }
z这个可以了
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<math.h> using namespace std; int n,m; int f[5001],b[5000]; int ans1=0,ans2=0,ans3=0; int ansx,ansy; char ansz; int find(int x) { if(x!=f[x]) return f[x]=find(f[x]); else return f[x]; } void bing(int x,int y) { int f1=find(x),f2=find(y); f[f1]=f2; } int main() { // freopen("fortress.in","r",stdin); // freopen("fortress.out","w",stdout); scanf("%d%d",&m,&n); int c; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i*m+j]=i*m+j; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&c); if((c-8)<0) bing(i*m+j,i*m+j+m);else c-=8; if((c-4)<0) bing(i*m+j,i*m+j+1);else c-=4; if((c-2)<0) bing(i*m+j,i*m-m+j);else c-=2; if(!c) bing(i*m+j,i*m-1+j); } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) b[find( i*m+j )]+=1; for(int i=n;i>=1;i--) for(int j=1;j<=m;j++) if(b[i*m+j]) { ans1++; ans2=max(ans2,b[i*m+j]); if(find(i*m+j)!=find(i*m+j+1)) { if((b[f[i*m+j]]+b[f[i*m+j+1]])>ans3) ans3=(b[f[i*m+j]]+b[f[i*m+j+1]]); } if(find(i*m+j)!=find(i*m+j-m)) { if((b[f[i*m+j]]+b[f[i*m+j-m]])>ans3) ans3=(b[f[i*m+j]]+b[f[i*m+j-m]]); } } printf("%d\n%d\n%d\n",ans1,ans2,ans3); for(int i=n;i>=1;i--) for(int j=1;j<=m;j++) { if(b[f[i*m+j]]+b[f[i*m+j+1]]==ans3) { printf("%d %d E",i,j); return 0; } if((b[f[i*m+j]]+b[f[i*m+j-m]])==ans3) { printf("%d %d N",i,j); return 0; } } return 0; }