CodeForces - 156B Suspects 逻辑 线性 想法 题
题意:有1~N,n(1e5)个嫌疑人,有m个人说真话,每个人的陈述都形如X是凶手,或X不是凶手。现在给出n,m及n个陈述(以+x/-X表示)要求输出每个人说的话是true ,false or notdefine.
题解:模拟,依次假设每个人是犯人,统计说真话的有几个,如果 ==m 就符合。
现在考虑notdefine:当符合的情况数大于1时,就说明有notdefine。
因为枚举时,某一对-y-x,x是凶手时,-x是假话-y是真话,y是凶手时,-x真话-y假话。而其他人的陈述都与xy无关
所以模拟的方法如下://想法很多。
/*wa
如果一个人说的是+x,那么要么true,要么false。
如果是-x那么如果x是犯人则false,如果不是犯人,可能是true可能是not define(x可能是犯人的情况) .
*/
/*wa的想法:跳过
一个ans[x]数组每次有符合的情况,对每个说真话的人i,ans[i]++,
如果没有多种情况时,根据ans 0,1 情况输出,
否则对于ans>1的输出notdifine
*/
正确逻辑记录任意一个人是凶手时是否满足m句话成立,同时统计成立的情况数def。若def=1,则答案没有notdefine
否则对于+x,x若不可能是凶手(是凶手时不满足条件)puts lie, 若可能是凶手(他是凶手满足条件,同时有多组情况成立。换言之,别人是凶手,也满足条件)puts not define.
//说得很绕,逻辑就是如此。
判断代码如下:
if (cnt == m)def++,ans[x]=1;//def 情况数,ans为i满足条件的记录
if (def != 1)def = 0;
for (int i = 1; i <= n; i++) {
if (a[i] > 0)
if (ans[a[i]] == 0)puts("Lie"); else if (def)puts("Truth"); else puts("Not defined");
else
if (ans[-a[i]] == 0)puts("Truth"); else if (def)puts("Lie"); else puts("Not defined");
}
然后注意记录某人是否可能成为凶手时,O(1)判断,否则会T
具体做法是预处理数组x,y保存 说i是凶手 的人数 ,及否认i是凶手 的人数,再保存一下否认语句的总数k。
然后对于每个i如果x[i]+(k-y[i])==m则他是凶手,
这个公式的具体意思是 当i是凶手时 说i是凶手的个数加上 又没有说i不是凶手的人的个数等于m。。。//真的绕orz
ac代码:
#include<iostream>
#define N 100001
#define _for(i, a, b) for (int i = (a); i<(b); ++i)
using namespace std;
int a[N], x[N], y[N], l[N], t = , k = ;
int main() {
int n, m;
cin >> n >> m;
_for(i, , n) { cin >> a[i]; if (a[i]>)x[a[i]]++; else y[-a[i]]++, k++; }
_for(i, , n + ) if (x[i] + k - y[i] == m)t++, l[i] = ;
if (t != ) t = ;
_for(i, , n)if (a[i] > ) cout << (!l[a[i]] ? "Lie" : t ? "Truth" : "Not defined") << endl;
else cout << (!l[-a[i]] ? "Truth" : t ? "Lie" : "Not defined") << endl;
}
CodeForces - 156B Suspects 逻辑 线性 想法 题的更多相关文章
- codeforces 657C - Bear and Contribution [想法题]
题目链接: http://codeforces.com/problemset/problem/657/C ----------------------------------------------- ...
- CodeForces - 798D Mike and distribution 想法题,数学证明
题意:给你两个数列a,b,你要输出k个下标,使得这些下标对应的a的和大于整个a数列的和的1/2.同时这些下标对应的b //题解:首先将条件换一种说法,就是要取floor(n/2)+1个数使得这些数大于 ...
- CodeForces - 55C Pie or die 想法题(猜程序)
http://codeforces.com/problemset/problem/55/C 题意:一个博弈. 题解:瞎猜,目前不清楚原理 #include<iostream> #inclu ...
- Codeforces 156B Suspects——————【逻辑判断】
Suspects Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- CodeForces 156B Suspects(枚举)
B. Suspects time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- codeforces 584E Anton and Ira [想法题]
题意简述: 给定一个$1$到$n(n<=2000)$的初始排列以及最终排列 我们每次可以选取位置为$i$和$j$的 并交换它们的位置 花费为$ |i-j| $ 求从初始状态变换到末状态所需最小花 ...
- codeforces gym 100345I Segment Transformations [想法题]
题意简述 给定一个由A C G T四个字母组成的密码锁(每拨动一次 A变C C变G G变T T变A) 密码锁有n位 规定每次操作可以选取连续的一段拨动1~3次 问最少几次操作可以将初始状态变到末状态 ...
- codeforces 11 B.Jumping Jack 想法题
B. Jumping Jack Jack is working on his jumping skills recently. Currently he's located at point zero ...
- CodeForces 111B - Petya and Divisors 统计..想法题
找每个数的约数(暴力就够了...1~x^0.5)....看这约数的倍数最后是哪个数...若距离大于了y..统计++...然后将这个约数的最后倍数赋值为当前位置...好叼的想法题.... Program ...
随机推荐
- 【Postgres】dump数据库备份与还原
备份 pg_dump.exe -h localhost -p 5432 -U postgres -F plain -v -f C:\Backup.sql db1 2> C:\Backup.log ...
- 在eclipse中查看android源代码
自己写了一个类MainAcvitivity extends Activity, 按F12(我把转到定义改成了F12的快捷键),转到Activity的定义,弹出下面这样的界面 就是说没有找到androi ...
- jenkins配置RF构建结果显示
声明:转载请注明出处,谢谢 步骤1:安装robot framework plugin插件:系统管理-管理插件 步骤2:设置构建后操作:job-配置-构建后操作增加“Publish Robot Fram ...
- 禁用Visual Studio 2013的Browser Link功能 -调试不断请求http://localhost:6154/c4ad1c693ebf428283832eaa827f9c6e/arterySignalR/poll?transport=longPolling...
关于禁用查到的解决: 作者:donny945 https://my.oschina.net/ind/blog/359003 今天浏览器调试代码的时候,一直出现以下的请求,导致需要看的请求都被淹没了,之 ...
- HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP错误解决方法
在树莓派上运行在windows上正确的程序, 报错: HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP OpenCV Error: Assertion failed (s ...
- 【Spring Boot&&Spring Cloud系列】使用Intellij构建Spring Boot和Mybatis项目
一.创建项目 1.File->New->Project->spring initializer 2.勾选Web SQL Template Engines 3.项目生成之后,点击add ...
- scanf printf gets() puts(),cin cout
最近在练机试题,常用的C和C++输入输出如下: 1 scanf 和printf int a; scanf("%d",&a) ; printf("%d", ...
- python tkinter学习——布局
目录 一.pack() 二.grid() 三.place() 四.Frame() 正文 布局 一.pack() pack()有以下几个常用属性: side padx pady ipadx ipady ...
- FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接
一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户 ...
- C语言程序设计--宏和预处理
C语言宏 宏定义常量 #include <stdio.h> #define SIZE 100 #define BANNER "WARNING:" int main(vo ...