题意:有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 逻辑 线性 想法 题的更多相关文章

  1. codeforces 657C - Bear and Contribution [想法题]

    题目链接: http://codeforces.com/problemset/problem/657/C ----------------------------------------------- ...

  2. CodeForces - 798D Mike and distribution 想法题,数学证明

    题意:给你两个数列a,b,你要输出k个下标,使得这些下标对应的a的和大于整个a数列的和的1/2.同时这些下标对应的b //题解:首先将条件换一种说法,就是要取floor(n/2)+1个数使得这些数大于 ...

  3. CodeForces - 55C Pie or die 想法题(猜程序)

    http://codeforces.com/problemset/problem/55/C 题意:一个博弈. 题解:瞎猜,目前不清楚原理 #include<iostream> #inclu ...

  4. Codeforces 156B Suspects——————【逻辑判断】

    Suspects Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit St ...

  5. CodeForces 156B Suspects(枚举)

    B. Suspects time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  6. codeforces 584E Anton and Ira [想法题]

    题意简述: 给定一个$1$到$n(n<=2000)$的初始排列以及最终排列 我们每次可以选取位置为$i$和$j$的 并交换它们的位置 花费为$ |i-j| $ 求从初始状态变换到末状态所需最小花 ...

  7. codeforces gym 100345I Segment Transformations [想法题]

    题意简述 给定一个由A C G T四个字母组成的密码锁(每拨动一次 A变C C变G G变T T变A) 密码锁有n位 规定每次操作可以选取连续的一段拨动1~3次 问最少几次操作可以将初始状态变到末状态 ...

  8. codeforces 11 B.Jumping Jack 想法题

    B. Jumping Jack Jack is working on his jumping skills recently. Currently he's located at point zero ...

  9. CodeForces 111B - Petya and Divisors 统计..想法题

    找每个数的约数(暴力就够了...1~x^0.5)....看这约数的倍数最后是哪个数...若距离大于了y..统计++...然后将这个约数的最后倍数赋值为当前位置...好叼的想法题.... Program ...

随机推荐

  1. Struts2_day03讲义_使用Struts2完成对客户查询的优化操作

  2. 8 -- 深入使用Spring -- 1...1Bean后处理器

    8.1.1 Bean后处理器(BeanPostProcessor) Bean后处理器主要负责对容器中其他Bean执行后处理,例如为容器中的目标Bean生成代理等. Bean后处理器会在Bean实例创建 ...

  3. 在vue中优雅的使用LocalStrong

    h5的LocalStrong帮我们缓存一些数据到本地,最常用的使用场景,比如京东购物在未登陆的状态下,把商品加入购物车,收藏某个商品.当我们把url复制到另外一个浏览器,购物车就是空的. 以下是一个简 ...

  4. 【Python】Linux Acanoda PySpark Spark

    1.安装 Acanoda  2.安装 Spark和Scala 3.安装 PySpark 4.将Spark的Python目录拷贝至 Acanoda目录下 5.安装py4j,切换anaconda中bin目 ...

  5. 【代码审计】711cms_V1.0.5 目录遍历漏洞分析

      0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...

  6. 【RF库Collections测试】Set List Value

    Name:Set List ValueSource:Collections <test library>Arguments:[ list_ | index | value ]Sets th ...

  7. Django 添加应用

    一个项目可以添加多个应用,可以使用以下两种方法来添加应用: [root@localhost web]$ python manage.py startapp blog [root@localhost w ...

  8. N76E003之定时器3

    定时器3是一个16位自动重装载,向上计数定时器.用户可以通过配置T3PS[2:0] (T3CON[2:0])选择预分频,并写入重载值到R3H 和R3L寄存器来决定它的溢出速率.用户可以设置TR3 (T ...

  9. 敏捷开发中的Scrum流程和术语【转】

    任何人力流程都离不开人来执行,所以在讲解Scrum流程之前,有必要先把Scrum中的角色讲一下. 一天,一头猪和一只鸡在路上散步,鸡看了一下猪说,“嗨,我们合伙开一家餐馆怎么样?”,猪回头看了一下鸡说 ...

  10. linux系统环境搭建

    一.安装jdk 参考帖子 用yum安装JDK(CentOS) 1.查看yum库中都有哪些jdk版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [r ...