POJ 1029--False coin
来源:互联网 发布:如何做淘宝详情页 编辑:程序博客网 时间:2024/05/17 17:14
题意
题目意思是讲,有若干个硬币,其中可能存在一个质量有误的。现在通过许多次比较来确定哪个的质量不同于其他硬币。
分析
每一次比较的时候,只要不是“=”,显然两边的任何一个硬币都有嫌疑。因此,在每一次不是“=”的时候,为所有嫌疑币施加一个嫌疑值。我们约定让天平较低一方的所有硬币,嫌疑值-1,让较高的+1。当出现“=”的时候,重置两侧硬币的嫌疑值为0(这些硬币质量肯定正确)。假定最后只有一个硬币的嫌疑值不为0,那么显然这个币质量不同于其他,如果有多个非0,那么便是绝对值较大的。
至于理由,其实也简单。假定有异常硬币重于其他的硬币,那么它的嫌疑值便会一直增加。而其他硬币跟这枚异常币在一个托盘的时候,嫌疑值会增加,但在对面托盘的时候,嫌疑值会降低,那么最后它们的嫌疑值的绝对值便小于异常币。最后如果出现多个最大绝对值,说明有一枚币跟异常币一直在一个托盘,或者一直在对面托盘,这样显然在题目要求下无解。异常币要么不存在,要么只会有一个,所以此法可行。
代码如下:
Memory: 124K Time: 16MS Length: 79LINES
#include<cstdlib>#include<cstdio>int ArrInt[1001] = {};bool ArrBl[1001] = {};int num[1000] = {};int N = 0;int K = 0;int Pi = 0;char cmp;int sign = 0;int main(){ scanf("%d%d", &N, &K); for (int i = 0; i < K; ++i) { scanf("%d", &Pi); for (int j = 0; j < Pi * 2; ++j) scanf("%d", &num[j]); getchar(); scanf("%c", &cmp); if (cmp == '=') for (int k = 0; k < Pi; ++k) ArrBl[num[k]] = ArrBl[num[k + Pi]] = true; else if (cmp == '<') { ++sign; for (int k = 0; k < Pi; ++k) { if (!ArrBl[num[k]]) --ArrInt[num[k]]; if (!ArrBl[num[k + Pi]]) ++ArrInt[num[k + Pi]]; } } else { ++sign; for (int k = 0; k < Pi; ++k) { if (!ArrBl[num[k]]) ++ArrInt[num[k]]; if (!ArrBl[num[k + Pi]]) --ArrInt[num[k + Pi]]; } } } int key = 0; int key2 = 0; int count = 0; int first = 0; int seconed = 0; for (int i = 1; i <= N; ++i) { if (sign == 0) { if (!ArrBl[i]) { if (++count > 1) break; key = i; } } else { if (!ArrBl[i] && ArrInt[i] != 0) { if (abs(ArrInt[i]) >= seconed) { first = seconed; seconed = abs(ArrInt[i]); key2 = i; } ++count; key = i; } } } if (count == 1) printf("%d\n", key); else { if (sign == 0 || first == seconed) printf("%d\n", 0); else printf("%d\n", key2); } return 0;}
阅读全文
0 0
- 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 1029-False coin
- POJ 1029 False coin
- POJ 1029--False coin
- POJ 1029 False coin 笔记 模拟
- POJ 1029 False coin 找假币 模拟
- poj 1028 False coin
- 1029 False coin
- 1029 False coin
- 1029 False coin
- AutoIt3 自动化工具
- Oracle序列
- python一些包的说明文档/教程链接
- OpenWRT刷机入门
- PySerial学习系列1--serial.tools
- POJ 1029--False coin
- c++ 零散重要知识点
- Java 关于HashTable和SynchronizedMap线程安全的分析
- Scala class和case class的区别
- gRPC开发入门
- 解决scrapy存储json中文默认为Unicode编码问题
- PAT甲级 1028. List Sorting (25)
- 数组和列表的选择
- Pycharm DataBase Navigator Plugins 使用