题意:给你n个硬币,里面有一个假硬币,再给你m个判断条件,让你找假硬币,输出假硬币的编号,如果无法判断,则输出0。
思路:注意假硬币可能比真硬币轻也可能比真硬币重。。。。当初不知道,wa了很久。。。。
1.如果给定的数字后面是”=“,则刚才所有的硬币全是真币
2.如果给定的数字后面不是”=“,则假硬币一定在其中,记录下来,把所有">"、"<"统一成相同的符号,比如统一成”>“,则左边的硬币加入时a[编号]++,右边的硬币加入时a[编号--]
3.假币一定是出现次数跟不等号出现次数相等的,且不在等号中出现
AC代码:
import java.util.Scanner;
public class Main
{
static Scanner scan=new Scanner(System.in);
public static void main(String[] args)
{
int n=scan.nextInt();
int k=scan.nextInt();
boolean equal[]=new boolean[n+1];
int unequal[]=new int[n+1],temp[]=new int[n+1];
int p,key,count=0,num=0,sum=0;
while(k-->0)
{
p=scan.nextInt();
for(int i=0;i<2*p;i++)
temp[i]=scan.nextInt();
key=scan.next().charAt(0);
if(key=='=')
for(int i=0;i<2*p;i++)
equal[temp[i]]=true;
else
{
count++;
if(key=='>')
for(int i=0;i<p;i++)
{
unequal[temp[i]]++;
unequal[temp[p+i]]--;
}
else
for(int i=0;i<p;i++)
{
unequal[temp[i]]--;
unequal[temp[p+i]]++;
}
}
}
for(int i=1;i<=n;i++)
if(!equal[i] && count==Math.abs(unequal[i]))
{num=i;sum++;}
System.out.println(sum==1?num:0);
}
}