首页 > 代码库 > 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;    }}
View Code

 

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);}
View Code

 

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);}
View Code

 

2017 济南综合班 Day 4