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 |
郁闷啊,过遍所有数据还是一直哇哇叫,帮我看看思路想法很简单啊 就是 0.先T除所有等号里出现的数据 目标就在剩下的元素里 然后看大于小于号里的数据(已经T除=号里的数据) 1.找到在所有小于号或者大于号左边出现的数字 就是不等式左边的公共数字,个数几位n1 2.找到在所有小于号或者大于号右边出现的数字 就是不等式左边的公共数字,个数几位n2 3.如果n1==1 n2==0则就是不等式左边的那个公共数字啊 如果n2==1 n1==0则就是不等式右边的那个公共数字啊 4.其他情况是0 试过讨论所有测试数据就是出错,郁闷啊 贴上代码了啊 /*POJ1029-False Coin Author: sjgg Date: Dec-25-2009 */ #include <stdio.h> int main() { int n,k; int i,j; char s[100]; int nums[100]; int arr[100][1000]; int is_in_ne[100]={0}; int is_in_ne1[100]={0}; int false_index; int false_index1,false_index2; int count=0; int num_ne=0; int common_nums1=0,common_nums2=0; int num_of_greater=0; int num_of_smaller=0; scanf("%d%d",&n,&k); for(i=0;i<k;i++) { scanf("%d",&nums[i]); for(j=0;j<nums[i]*2;j++) scanf("%d",&arr[i][j]); while(1) { s[i]=getchar(); if(s[i]=='=' || s[i]=='<' || s[i]=='>') break; } } //如果只有两个coin,则不能判断 if(n==2) { false_index=0; printf("%d",false_index); return 0; } //如果有大有小则不能判断 for(i=0;i<k;i++) { if(s[i]=='<') num_of_smaller++; else if(s[i]=='>') num_of_greater++; } if(num_of_greater>0 && num_of_smaller>0) { false_index=0; printf("%d",false_index); return 0; } for(i=0;i<k;i++) if(s[i]=='<' || s[i]=='>') break; //如果都是都是等号去除等号元素,如剩下一个则找到 if(i==k) { for(i=0;i<k;i++) if(s[i]=='=') { for(j=0;j<nums[i]*2;j++) { is_in_ne[arr[i][j]-1]=2; } } for(i=0;i<n;i++) if(is_in_ne[i]==0) { count++; false_index=i+1; } if(count!=1) false_index=0; printf("%d",false_index); return 0; } //如果存在大于小于号去除等号数字 for(i=0;i<k;i++) if(s[i]=='=') { for(j=0;j<nums[i]*2;j++) { is_in_ne[arr[i][j]-1]=-1; } } for(i=0;i<k;i++) is_in_ne1[i]=is_in_ne[i]; // num_ne=num_of_smaller+num_of_greater; //如果有不等号存在则表上不等号数 for(i=0;i<k;i++) if(s[i]=='<' || s[i]=='>') { for(j=0;j<nums[i];j++) { if(is_in_ne[arr[i][j]-1]!=-1) is_in_ne[arr[i][j]-1]++; } for(j=nums[i];j<nums[i]*2;j++) { if(is_in_ne[arr[i][j]-1]!=-1) is_in_ne1[arr[i][j]-1]++; } } //找到公共不等数的个数 for(i=0;i<n;i++) { if(is_in_ne[i]==num_ne) { common_nums1++; false_index1=i+1; } if(is_in_ne1[i]==num_ne) { common_nums2++; false_index2=i+1; } } //只有一个公共不等数,则找到 if(common_nums1==1 && common_nums2==0) { printf("%d",false_index1); return 0; } if(common_nums2==1 && common_nums1==0) { printf("%d",false_index2); return 0; } else { false_index=0; printf("%d",false_index); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator