我是靠谱客的博主 高挑导师,最近开发中收集的这篇文章主要介绍Suspects,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原题:CodeForces - 156B

题意:

一个人犯罪,n个人m个说了真话,+n:n是罪犯,-n:n不是
判断每个人说的话的真假

解析

枚举每个人是罪犯的情况

有以下要求才能实现:

  1. 判断i为罪犯时怎么求说真话人数
    用d数组存说i为罪犯的人数,nd存说i不是的人数,sum_no存所有说不是的人数,那么真话人数==d[i]+(sum-nd[i])
  2. 判断每个人说的话
    存下每个人说的话,假设只有一种情况真话人数==m,那么看看i说的和那种情况符合与否;如果有多种情况,假设对所有情况都不符合或都符合即可判断真假,若有符合有不符合的就为不确定

代码

#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
int n,m;
int say[100009],d[100009],nd[100009],is_cri[100009];
int main(){
    scanf("%d%d",&n,&m);
    int sum_no=0,sum_cri=0;
    for(int i=1;i<=n;i++){
        scanf("%d",&say[i]);
        if(say[i]>0)d[say[i]]++;
        else {
            nd[-say[i]]++;sum_no++;
        }
    }
    for(int i=1;i<=n;i++){
        if(d[i]+sum_no-nd[i]==m)is_cri[i]=1,sum_cri++;
    }
    for(int i=1;i<=n;i++){
        if(say[i]>0){
            if(sum_cri==1&&is_cri[say[i]]==1)printf("Truthn");
            else if(is_cri[say[i]]==0)printf("Lien");//说是的那个人不可能为罪犯
            else  printf("Not definedn");//除了说的那个还有其他人可能是罪犯 
        }
        else{
            if(is_cri[-say[i]]==0)printf("Truthn");//说的那个不可能是 
            else if(sum_cri==1)printf("Lien");//肯定是说的那个 
            else printf("Not definedn");
        }
    }
}

最后

以上就是高挑导师为你收集整理的Suspects的全部内容,希望文章能够帮你解决Suspects所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部