2017 济南综合班 Day 4
Posted 日拱一卒 功不唐捐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017 济南综合班 Day 4相关的知识,希望对你有一定的参考价值。
T1 外星人
二维前缀和
#include<cstdio> #define N 1001 using namespace std; bool v[N][N]; int sum[N][N]; int main() { freopen("alien.in","r",stdin); freopen("alien.out","w",stdout); int r,c,p,q; scanf("%d%d%d%d",&r,&c,&p,&q); int x,y; for(int i=1;i<=p;i++) { scanf("%d%d",&x,&y); v[x][y]=true; } for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+v[i][j]; int ans=0; while(q--) { scanf("%d%d",&x,&y); for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) { if(i-x>=0 && j-y>=0 && sum[i][j]-sum[i-x][j]-sum[i][j-y]+sum[i-x][j-y]==0) ans++; if(x==y) continue; if(i-y>=0 && j-x>=0 && sum[i][j]-sum[i-y][j]-sum[i][j-x]+sum[i-y][j-x]==0) ans++; } printf("%d\\n",ans); ans=0; } }
T2 游戏
点权*2
边权分别加到两个点上
排序、贪心、两人轮流选当前最大
点权乘了2,边权是自己的乘了2,不是自己的减了去
最后除2就是答案
#include<cstdio> #include<algorithm> #include<iostream> #define N 10001 using namespace std; int a[N]; int main() { freopen("game.in","r",stdin); freopen("game.out","w",stdout); int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]<<=1; int u,v,w; while(m--) { scanf("%d%d%d",&u,&v,&w); a[u]+=w; a[v]+=w; } sort(a+1,a+n+1,greater<int>()); int ans=0; for(int i=1;i<=n;i+=2) { ans+=a[i]; ans-=a[i+1]; } printf("%d",ans>>1); }
T3 堡垒
当时改了最后一行的输出,忘了改成啥了
所以就忽略最后一行输出吧
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char move; int m,n,xx,yy; int sum,tmp,maxn,big; int E[61][61][61][61],N[61][61][61][61]; bool v[61][61]; void dfs(int x,int y) { v[x][y]=true; tmp++; if(x!=1 && !N[x][y][x-1][y] && !v[x-1][y]) dfs(x-1,y); if(y!=m && !E[x][y][x][y+1] && !v[x][y+1]) dfs(x,y+1); if(x!=n && !N[x+1][y][x][y] && !v[x+1][y]) dfs(x+1,y); if(y!=1 && !E[x][y-1][x][y] && !v[x][y-1]) dfs(x,y-1); } int main() { freopen("fortress.in","r",stdin); freopen("fortress.out","w",stdout); int x; scanf("%d%d",&m,&n); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&x); if(x&(1<<1)) N[i][j][i-1][j]=true; if(x&(1<<2)) E[i][j][i][j+1]=true; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(!v[i][j]) { sum++; tmp=0; dfs(i,j); maxn=max(maxn,tmp); } printf("%d\\n%d\\n",sum,maxn); for(int i=n;i>=1;i--) for(int j=1;j<=m;j++) { if(i!=1 && N[i][j][i-1][j]) { memset(v,0,sizeof(v)); N[i][j][i-1][j]=false; tmp=0; dfs(i,j); if(tmp>maxn) maxn=tmp,xx=i,yy=j,move=\'N\'; N[i][j][i-1][j]=true; } if(j!=m && E[i][j][i][j+1]) { memset(v,0,sizeof(v)); E[i][j][i][j+1]=false; tmp=0; dfs(i,j); if(tmp>maxn) maxn=tmp,xx=i,yy=j,move=\'E\'; E[i][j][i][j+1]=true; } } printf("%d\\n",maxn); printf("%d %d %c",xx,yy,move); }
以上是关于2017 济南综合班 Day 4的主要内容,如果未能解决你的问题,请参考以下文章