PAT乙级1089狼人杀-简单版 20(分)
题目
以下文字摘自《灵机一动·好玩的数学》:“狼人杀”游戏分为狼人、好人两大阵营。在一局“狼人杀”游戏中,1 号玩家说:“2 号是狼人”,2 号玩家说:“3 号是好人”,3 号玩家说:“4 号是狼人”,4 号玩家说:“5 号是好人”,5 号玩家说:“4 号是好人”。已知这 5 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎。扮演狼人角色的是哪两号玩家?
本题是这个问题的升级版:已知 N N N 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎。要求你找出扮演狼人角色的是哪几号玩家?
输入格式:
输入在第一行中给出一个正整数 N N N ( 5 ≤ N ≤ 1 0 0 5 \le N \le 100 5 ≤ N ≤ 1 0 0 )。随后 N N N 行,第 i i i 行给出第 i i i 号玩家说的话( 1 ≤ i ≤ N 1 \le i \le N 1 ≤ i ≤ N ),即一个玩家编号,用正号表示好人,负号表示狼人。
输出格式:
如果有解,在一行中按递增顺序输出 2 个狼人的编号,其间以空格分隔,行首尾不得有多余空格。如果解不唯一,则输出最小序列解 —— 即对于两个序列 A = a [ 1 ] , . . . , a [ M ] A = { a[1], ..., a[M] } A = a [ 1 ] , . . . , a [ M ] 和 B = b [ 1 ] , . . . , b [ M ] B = { b[1], ..., b[M] } B = b [ 1 ] , . . . , b [ M ] ,若存在 0 ≤ k < M 0 \le k < M 0 ≤ k < M 使得 a [ i ] = b [ i ] a[i]=b[i] a [ i ] = b [ i ] ( i ≤ k i \le k i ≤ k ),且 a [ k + 1 ] < b [ k + 1 ] a[k+1] a [ k + 1 ] < b [ k + 1 ] ,则称序列 A A A 小于序列 B B B 。若无解则输出 No Solution 。
输入样例 1:
5
-2
+3
-4
+5
+4
输出样例 1:
1 4
输入样例 2:
6
+6
+3
+1
-5
-2
+4
输出样例 2(解不唯一):
1 5
输入样例 3:
5
-2
-3
-4
-5
-1
输出样例 3:
No Solution
代码
#include
#include
#include
#include
using namespace std;int cmp(double a, double b)
{if (a > b)return 0;else if (a == b)return 1;elsereturn 2;
}
int main()
{string strJ, strY;string out[3] = { "Cong","Ping","Gai" };int jia, yi, M, X, Y, i;double bing = 0; //丙可能是小数cin >> M >> X >> Y;for (i = 99; i >= 10; i--){jia = i;strJ = to_string(jia);strY = strJ;reverse(strY.begin(), strY.end());yi = atoi(strY.c_str());int cha = abs(jia - yi);if (cha * 1.0 / X == yi * 1.0 / Y){bing = cha * 1.0 / X; break;}}if (bing)cout << jia << " " << out[cmp(jia, M)] << " " << out[cmp(yi, M)] << " " << out[cmp(bing, M)] << endl;if (!bing)cout << "No Solution" << endl;return 0;
}
题目详情链接
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
