Codeforces 701A+701B

来源:互联网 发布:淘宝店标图片制作 编辑:程序博客网 时间:2024/04/27 15:13

701A 题意:给偶数张有点数的卡,问如何分配能使n/2个人拿到的点数一样

记录输入顺序,按点数排序,每次拿首尾两张

#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<math.h>#include<string.h>#include<queue>#include<vector>#include<map>#include<iostream>#include<string>#define LL long longusing namespace std;struct st{    int bef;    int aft;}card[105];bool cmp(st a,st b){    return a.aft<b.aft;}int main(){//freopen("test.txt","r",stdin);    int n,ans=0;    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%d",&card[i].aft);        card[i].bef=i;    }    sort(card+1,card+1+n,cmp);    for(int i=1;i<=n/2;i++) printf("%d %d\n",card[i].bef,card[n-i+1].bef);    return 0;}

701B 题意:有n*n棋盘,输入m个车的坐标,对于每次新车的输入,计算不会被车攻击到的格数

每次有新的行/列被访问,则下一个访问能够影响到的行/列数相应减少

</pre><pre name="code" class="cpp">#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<math.h>#include<string.h>#include<queue>#include<vector>#include<map>#include<iostream>#include<string>#define LL long longusing namespace std;const int N=1e6+5;bool xv[N],yv[N];LL ans[N];int main(){//freopen("test.txt","r",stdin);    LL n,m;    int x,y,dx=0,dy=0;    scanf("%I64d%I64d",&n,&m);    for(int i=0;i<m;i++)    {        if(i==0) ans[i]=n*n;        else ans[i]=ans[i-1];        scanf("%d %d",&x,&y);        if(!xv[x])        {            ans[i]-=(n-dy);            xv[x]=1;            dx++;        }        if(!yv[y])        {            ans[i]-=(n-dx);            yv[y]=1;            dy++;        }    }    for(int i=0;i<m;i++)    {        printf("%I64d",ans[i]);        if(i!=m-1) printf(" ");    }    printf("\n");    return 0;}


0 0