洛谷 P1039 侦探推理

<svg style="display&#58; none&#59;" xmlns="http&#58;&#47;&#47;www&#46;w3&#46;org&#47;2000&#47;svg"> </svg>

题目:https://www.luogu.org/problemnew/show/P1039

分析:

这道题是一道有技术含量的模拟,我们主要是不要让计算机向人一样思考,只需要让他穷举变化的星期几和当罪犯的人的编号即可,然后就是用string来操作会显得十分方便

#include<iostream> 
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
int n,m,p,fake[21],err,w[200],nx;
string name[100],say[200];
string day[10]={"QAQ","Today is Sunday.","Today is Monday.","Today is Tuesday.","Today is Wednesday.","Today is Thursday.","Today is Friday.","Today is Saturday."};
void set(int who,int yx)
{
    if(fake[who]&&fake[who]!=yx)err=1;
    else fake[who]=yx;
}
int main()
{
    scanf("%d%d%d",&m,&n,&p);
    for(int i=1;i<=m;i++)
        cin>>name[i];
    for(int i=1;i<=p;i++)
	{
        string nm;
        cin>>nm;
        nm.erase(nm.end()-1);
        for(int j=1;j<=m;j++)
        	if(name[j]==nm)
				w[i]=j;

        getline(cin,say[i]);
        say[i].erase(say[i].begin()); 
        say[i].erase(say[i].end()-1);
    }
    for(int td=1;td<=7;td++) 
    for(int px=1;px<=m;px++)
	{
        err=0;
        memset(fake,0,sizeof(fake)); 
        for(int i=1;i<=p;i++)
		{
            int who=w[i];
            if(say[i]=="I am guilty.")set(who,px==who?1:-1);
            if(say[i]=="I am not guilty.")set(who,px!=who?1:-1);
            for(int j=1;j<=7;j++)
            if(say[i]==day[j])set(who,j==td?1:-1);
            for(int j=1;j<=m;j++)
			{
                if(say[i]==name[j]+" is guilty.")set(who,j==px?1:-1);
                if(say[i]==name[j]+" is not guilty.")set(who,j!=px?1:-1);
            }
        }
        int cnt=0,ppp=0;
        for(int i=1;i<=m;i++)
		{
            if(fake[i]==-1)cnt++;
            if(fake[i]==0)ppp++;
        }
        if(!err&&cnt<=n&&cnt+ppp>=n)
            if(nx&&nx!=px)
			{
                printf("Cannot Determine");
                return 0;
            }
			else nx=px;
    }
    if(!nx)printf("Impossible");
    else cout<<name[nx];
    return 0;
}

完结撒花~

全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
这是什么操作什么意思,这公司我服了...
斯派克spark:意思是有比你更便宜的牛马了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-28 12:15
点赞 评论 收藏
分享
05-21 15:47
门头沟学院 Java
浪漫主义的虹夏:项目有亮点吗,第一个不是纯玩具项目吗,项目亮点里类似ThreadLocal,Redis储存说难听点是花几十分钟绝大部分人都能学会,第二个轮子项目也没体现出设计和技术,想实习先沉淀,好高骛远的自嗨只会害了自己
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 13:54
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务