2017 多校训练第二场 HDU 6045 Is Derek lying?
来源:互联网 发布:淘宝电脑详情页尺寸 编辑:程序博客网 时间:2024/06/05 09:09
题目链接:点击打开链接
这道题算是一道逻辑判断。
对于两个人的答案,我们可以找出相同的个数和不相同的个数。
那么对于两人相同的答案,要么情况a:两人都对,要么情况b:两人都错
对于两人不同的答案,要么情况c:A对B错,要么情况d:A错B对,要么情况e:两人都错。
根据以上情况,我们可以列出等式:
a+b=same
c+d+e=diff
a+c=x
a+d=y
又因为a和b都是小于same,c和d和e都是小于diff的。
当a,b,d,e都用c表示后,可以发现四个不等式:
1 0<=c<=diff
2 x-same<=c<=x
3 x-y<=c<=diff+x-y
4 (x-y)/2<=c<=(diff-y+x)/2
只要有c满足上述四个等式,就可以认为没有撒谎Not lying!
遇到题目还是要冷静,把思维整理好之后才能取得胜利!
#include <bits/stdc++.h>using namespace std;// #define test TEST const int maxn=80005;char a[maxn],b[maxn];int main(int argc, char const *argv[]){#ifdef test freopen("test.txt","r",stdin);#endif int x,y,n,T;scanf("%d",&T);while(T--){scanf("%d %d %d",&n,&x,&y);scanf("%s %s",a,b);int diff=0;for(int i=0;i<n;i++){if(a[i]!=b[i]) diff++;}int same=n-diff;int flag=0;for(int i=0;i<=diff;i++){if(i>=(x-same)&&i<=x){if(i>=(x-y)&&i<=(diff+x-y)){if(i>=(x-y)/2&&i<=(diff-y+x)/2){flag=1;}}}if(flag) break;}if(flag){printf("Not lying\n");}else{printf("Lying\n");}}return 0;}
阅读全文
0 0
- 2017 多校训练第二场 HDU 6045 Is Derek lying?
- 2017 多校训练第二场 HDU 6045 Is Derek lying?(思维)
- 2017多校训练第二场 hdu6045 Is Derek lying
- 【多校训练】hdu 6045 Is Derek lying?
- HDU 6045 (2017 多校训练赛2 1001)Is Derek lying?
- HDU-2017 多校训练赛2-1001-Is Derek lying?
- 2017多校联合第二场 1001题 hdu 6045 Is Derek lying?
- 2017 杭电多校联赛第二场 1001 Is Derek lying? HDU 6045
- (2017多校训练第二场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第二场)HDU
- 2017杭电多校联赛第二场-Is Derek lying?(hdu6054)
- HDU 6045 Is Derek lying?
- hdu 6045 Is Derek lying?
- HDU 6045 Is Derek lying?
- hdu--6045 Is Derek Lying
- 动态规划(Hearthstone,HDU 5816)
- Faulty Odometer HDU
- 在 Linux 上配置 mongodb
- Banner简单使用
- git 拉取远程代码
- 2017 多校训练第二场 HDU 6045 Is Derek lying?
- POJ 3261 Milk Patterns 最长出现k次的子串长度(后缀数组)
- 2017年JavaScript框架---Top5
- AC自动机入门题目(HDU
- Jersey过滤器
- D
- CS231n课程笔记翻译4:最优化笔记
- Mysql语句总结(2)
- Java多线程-----CopyOnWriteArrayList