poj 1029
来源:互联网 发布:孤岛惊魂3低配优化 编辑:程序博客网 时间:2024/04/24 03:28
题意:找出那个和其他所有硬币重量不一样的硬币。具体信息看题目。
具体的思路如下:
1.等式两边出现的硬币不可能为假。
2不等式的轻端和重端都出现的硬币,不可能为假。
3轻端和重端出现次数不足k次的,也不可能为假(k是不等式的个数)
排除掉上述三种情况,只剩下一枚硬币没确定,那就是这枚硬币。其他情况就输出0.
代码如下:
import java.util.Scanner;public class Main {public static final int MAX = 1005;public static void main(String[] args){Scanner cin = new Scanner(System.in);int [] equal = new int[MAX];int [] t = new int[MAX];int [] d = new int[MAX];int n,k,p,sum,total,num;char s;total = 0;num = 0;n = cin.nextInt();k = cin.nextInt();for(int i=1; i<=n; i++){equal[i] = 0;t[i] = 0;}while((k--)!=0){p = cin.nextInt();for(int j=0; j<2*p; j++){d[j] = cin.nextInt();}s = cin.next().charAt(0);if(s=='='){ for(int i=0; i<2*p; i++){equal[d[i]] = 1; //记录出现在等式中硬币的标号}}else if(s=='<'){++total; //记录不平衡的次数 也就是不等式的次数for(int i=0; i<p; i++){--t[d[i]]; //对相应的硬币在不等式中出现的次数进行计数}for(int i=p; i<2*p; i++){++t[d[i]];}}else{++total; for(int i=0; i<p; i++){++t[d[i]];}for(int i=p; i<2*p; i++){--t[d[i]];}}} //不等式表示,特殊的硬币一定在其中了//不管特殊硬币是轻还是重,用一个条件判断一下就行了sum = 0;for(int i=1; i<=n; i++){if(equal[i]==1){continue;}if(t[i] == total || t[i] == -total){//如果特殊的硬币是重或者轻的情况++sum; //代表特殊硬币的个数num=i; //记住相应的标号}}if(sum==1){System.out.println(num);}else{System.out.println("0");}}}
- poj 1029
- POJ 1029
- POJ 1029
- poj-1029
- Poj 1029
- poj-1029
- poj 1029
- poj 1029
- poj 1013 && poj 1029【寻找硬币】
- poj 1029 False Coin
- POJ 1029 False coin
- poj 1029 False coin
- poj 1029 False coin
- poj 1029 False coin
- POJ-1029-False coin
- POJ 1029 False coin
- False coin - POJ 1029
- POJ 1029 False coin
- poj 1032 java版本
- (织梦cms)dedecms5.7注入和上传0day
- Linux 定时器设置
- Linux内核升级指南
- flash cs6 初试
- poj 1029
- Spring采用properties配置多个数据库
- java例程练习(一维数组)
- vector的相关误解
- 拦截QT关闭窗口的CloseEvent
- 分析称App应用内置广告已成移动广告市场主流
- Linux常用命令大全
- 四则运算表达式求值
- Android——CursorAdapter抽象类(API)