首页 > 代码库 > 2017 济南综合班 Day 4
2017 济南综合班 Day 4
T1 外星人
二维前缀和
#include<cstdio>#define N 1001using 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 10001using 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。