Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
0msIn Reply To:蛮力法,32ms 一次 AC,给大家分享一下,顺便给点建议 Posted by:hnlwt123 at 2008-08-05 20:10:36 /*思路:假币必然出现在不等式的一端,而且出现的次数必然等于不等式的数量,假币必然符合以下条件: 1.出现在等式中的次数为0 2.出现在不等式的同一端(假设没有一个硬币会同时出现在天平两端) 3.出现次数等于不等式出现的次数 满足以上条件的我们认为它符合规格,如果符合规格的硬币大于1个则与题设矛盾。故可以判断出假币. */ #include<stdio.h> #include<string.h> typedef struct{ int left; int right; int equal; }Da;//left<right int main() { int n,k,i,j,x,u,count; int Buf[1001]; char c[2]; freopen("in.txt","r",stdin); memset(N,0,sizeof(N)); scanf("%d %d",&n,&k); for(i=1,u=0;i<=k;i++){ scanf("%d",&x); for(j=1;j<=2*x;j++) scanf("%d",&Buf[j]); scanf("%s",c); if(c[0]=='=') for(j=1;j<=2*x;j++) N[Buf[j]].equal++; else if(c[0]=='>'){ u++; for(j=1;j<=x;j++) N[Buf[j]].right++; while(j<=2*x) N[Buf[j++]].left++; }//else if else if(c[0]=='<'){ u++; for(j=1;j<=x;j++) N[Buf[j]].left++; while(j<=2*x) N[Buf[j++]].right++; }//else if } count=0; if(u) for(i=1;i<=n;i++){ if(N[i].left==u&&!N[i].equal&&!N[i].right){ count++; x=i; } if(N[i].right==u&&!N[i].equal&&!N[i].left){ count++; x=i; } } else for(i=1;i<=n;i++){ if(!N[i].equal){ count++; x=i; } } if(count==1) printf("%d",x); else printf("0"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator