(数学)HDU 6045 Is Derek lying?
2017-07-27 19:35
381 查看
HDU-2017 多校训练赛2-1001-Is Derek lying?
题目网址: HDU 6045 Is Derek lying?
现已知 Derek 和 Alfia 每道题的选项, 问Derek是否欺骗了Alfia(只要存在一种合理的情况使得Derek所说的成绩成立, 则Derek没说谎, 否则Derek说谎)
思路:
计数 Derek 和 Alfia 有多少个选择是不同的, 保存在 cnt中
根据 Derek的得分 X求出Y的合理区间.
Y的取值范围 为
max(X - cnt, 0) <= Y <= min(N - cnt, X) + min(cnt, N - X)
取值范围的得出:
最小值: 当Derek的得分X都尽量在Derek和Alfia 选择不同时获得的, 此时Y最小, 注意, 选项不同的数目多于得分X时, 表示 Derek的得分都是在和Alfia中选择不同时获得的, 而Derek和Alfia选择相同的都是错的,所以没得分.所以 Y的最小值是 max(X-cnt, 0)
最大值: 当Derek的得分X都尽量在Derek和Alfia 选择相同时获得的, 且Derek与Alfia选择不同时, 尽量都是 Alfia选择是正确的时, 此时 Y最大. 注意 Derek 和Alfia 选择相同的数目是 N-cnt, 若他们选择相同大于 X, 则X的得分都是在 他们选择相同时获得, 且此时 他们选择不同中的cnt个都是Alfia做对,此时, Alfia分数最大. 若X得分大于他们选择相同的数目N-cnt, 那么此时相同选择部分得分是 N-cnt, X没得分的其他部分 N-X都是Alfia得分.
题目网址: HDU 6045 Is Derek lying?
题意分析:
题意: Derek 和 Alfia 做N道选择题(三选一), 且每次成绩出来后, Derek都会得知, 然后 Alfia会问Derek他 和 她考了多少分, Derek会告诉她, 他考了X分, Alfia考了 Y分, 但是Derek是调皮的, 有可能欺骗Alfia.现已知 Derek 和 Alfia 每道题的选项, 问Derek是否欺骗了Alfia(只要存在一种合理的情况使得Derek所说的成绩成立, 则Derek没说谎, 否则Derek说谎)
思路:
计数 Derek 和 Alfia 有多少个选择是不同的, 保存在 cnt中
根据 Derek的得分 X求出Y的合理区间.
Y的取值范围 为
max(X - cnt, 0) <= Y <= min(N - cnt, X) + min(cnt, N - X)
取值范围的得出:
最小值: 当Derek的得分X都尽量在Derek和Alfia 选择不同时获得的, 此时Y最小, 注意, 选项不同的数目多于得分X时, 表示 Derek的得分都是在和Alfia中选择不同时获得的, 而Derek和Alfia选择相同的都是错的,所以没得分.所以 Y的最小值是 max(X-cnt, 0)
最大值: 当Derek的得分X都尽量在Derek和Alfia 选择相同时获得的, 且Derek与Alfia选择不同时, 尽量都是 Alfia选择是正确的时, 此时 Y最大. 注意 Derek 和Alfia 选择相同的数目是 N-cnt, 若他们选择相同大于 X, 则X的得分都是在 他们选择相同时获得, 且此时 他们选择不同中的cnt个都是Alfia做对,此时, Alfia分数最大. 若X得分大于他们选择相同的数目N-cnt, 那么此时相同选择部分得分是 N-cnt, X没得分的其他部分 N-X都是Alfia得分.
代码:
#include <bits/stdc++.h> using namespace std; int main(int argc, char const *argv[]) { int testn; scanf("%d", &testn); int n, x, y; string D, A; while (testn--) { scanf("%d %d %d", &n, &x, &y); cin >> D; cin >> A; int cnt = 0; for (int i = 0; i < n; ++i) { if (D[i] != A[i]) ++cnt; } int ymin = max(x - cnt, 0); int ymax = min(n - cnt, x) + min(cnt, n - x); // printf("%d %d\n", ymin, ymax); if (y >= ymin && y <= ymax) printf("Not lying\n"); else printf("Lying\n"); } return 0; }
相关文章推荐
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- Is Derek lying? HDU - 6045 思维
- HDU 6045 Is Derek lying?【】
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- HDU 6045 - Is Derek lying | 2017 Multi-University Training Contest 2
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- hdu--6045 Is Derek Lying
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- 2017 多校训练第二场 HDU 6045 Is Derek lying?
- HDU 6045 Is Derek lying?(水~)
- 2017 杭电多校联赛第二场 1001 Is Derek lying? HDU 6045
- 17 多校 - 2 - 1001 - Is Derek lying? (HDU - 6045)
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- 2017多校联合第二场 1001题 hdu 6045 Is Derek lying?
- 【HDU】6045 - Is Derek lying?(思维)
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- HDU 6045 Is Derek lying?
- hdu 6045: Is Derek lying? (2017 多校第二场 1001)【找规律】
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- hdu 6045 Is Derek lying?