Codeforces Round #216 (Div. 2)

来源:互联网 发布:mac网页怎么添加收藏 编辑:程序博客网 时间:2024/05/16 15:10

这次比赛做得不要太难看。

A、简单题。

#include<stdio.h>#include<string.h>int main(){    int n,m,k;    while(scanf("%d%d%d",&n,&m,&k)!=EOF)    {        int x,y;        x=y=0;        for(int i=1;i<=n;i++)        {            int temp;            scanf("%d",&temp);            if(temp==1) x++;            else y++;        }        int ans=0;        if(m<x)        {            ans+=x-m;            if(k<y) ans+=y-k;        }        else        {            m-=x;            if(m+k<y) ans=y-m-k;        }        printf("%d\n",ans);    }    return 0;}

B、简单题。

#include<stdio.h>#include<string.h>int main(){    int n,k,l,r,sa,sk;    while(scanf("%d%d%d%d%d%d",&n,&k,&l,&r,&sa,&sk)!=EOF)    {        int x,y;        x=sk/k;        y=sk%k;        for(int i=1;i<=y;i++) printf("%d ",x+1);        for(int i=y+1;i<=k;i++) printf("%d ",x);        sa-=sk;        if(n-k==0) continue;        x=sa/(n-k);        y=sa%(n-k);        n-=k;        for(int i=1;i<=y;i++) printf("%d ",x+1);        for(int i=y+1;i<=n;i++) printf("%d ",x);        printf("\n");    }    return 0;}

C、一个简单的树形DP,如果一个节点的子树中修过路,那么这条节点到1的路就一定不修。

#include<stdio.h>#include<string.h>#define N 200005struct node{    int from,to;    int data;    int next;}a[N*2];int head[N],vis[N],ans[N];int tol,k;void add(int x,int y,int k){    a[tol].from=x;a[tol].to=y;a[tol].data=k;a[tol].next=head[x];head[x]=tol++;    a[tol].from=y;a[tol].to=x;a[tol].data=k;a[tol].next=head[y];head[y]=tol++;    return ;}int dfs(int x){    int cnt=0;vis[x]=1;    for(int i=head[x];i!=-1;i=a[i].next)    {int flag=0;if(vis[a[i].to]) continue;        if(!vis[a[i].to]){if(dfs(a[i].to)){flag++;cnt++;}}if(flag==0&&a[i].data==2){ans[k++]=a[i].to;cnt++;}    }    if(cnt>0) return 1;    return 0;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        memset(head,-1,sizeof(head));        tol=0;        for(int i=1;i<n;i++)        {            int x,y,k;            scanf("%d%d%d",&x,&y,&k);            add(x,y,k);        }        k=0;memset(vis,0,sizeof(vis));        dfs(1);        printf("%d\n",k);        for(int i=0;i<k;i++) printf("%d ",ans[i]);        printf("\n");    }    return 0;}