poj 1029

来源:互联网 发布:最贵的域名 编辑:程序博客网 时间:2024/05/02 00:04

称硬币的问题。。。。。小学期的题目出过。。。。但是不会做。。。。现在看了原题。。。

每次碰到等号。就标记这个硬币是真的,记录每次非等号情况下两遍硬币出现的次数。假硬币每次都会出现。如果最后情况数不唯一,就输出0。

#include <stdio.h>#include <string.h>#define maxn 2000int a[maxn];int vis[maxn];int times[maxn];int main(){    int n,m;    while(scanf("%d%d",&n,&m)!=EOF&&n+m)    {        int i,j,k;        int ans=0;int st=0;        char s[10];        memset(vis,0,sizeof(vis));        while(m--)        {            int tmp;            scanf("%d",&tmp);            for(i=0;i<2*tmp;i++)                scanf("%d",&a[i]);            scanf("%s",s);         //   j=0;           // printf("---%c\n",s[0]);            if(s[0]=='=')            {                for(i=0;i<2*tmp;i++) vis[a[i]]=1;            }            else if(s[0]=='<')            {                st++;//printf("---%d\n",j);                for(i=0;i<tmp;i++)                  times[a[i]]--;                for(i=tmp;i<2*tmp;i++)                  times[a[i]]++;            }            else if(s[0]=='>')            {                st++;//printf("--%d\n",j);                for(i=0;i<tmp;i++)                    times[a[i]]++;                for(i=tmp;i<2*tmp;i++)                    times[a[i]]--;            }        }      //  printf("j=%d\n",j);        k=0;        for(i=1;i<=n;i++)        {         //   printf("%d  %d\n",vis[i],times[i]);            if(!vis[i])                if(times[i]==st||times[i]==-st)            {               // printf("--%d\n",i);                ans=i;                k++;            }        }        if(k!=1) printf("0\n");        else printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击