PAT (Advanced Level) Practice - 1148 Werewolf - Simple Version(20 分)

简介: PAT (Advanced Level) Practice - 1148 Werewolf - Simple Version(20 分)

题目链接:点击打开链接

题目大意:已知 N 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎(即:说谎者==1只人类 + 1只狼人)。要求你找出扮演狼人角色的是哪几号玩家,如果有解,在一行中按递增顺序输出 2 个狼人的编号;如果解不唯一,则输出最小序列解;若无解则输出 No Solution~

解题思路:每个人说的数字保存在v数组中,i从1~n、j从i+1~n遍历,分别假设i和j是狼人,a数组表示该人是狼人还是好人,等于1表示是好人,等于-1表示是狼人。k从1~n分别判断k所说的话是真是假,k说的话和真实情况不同(即v[k] * a[abs(v[k])] < 0)则表示k在说谎,则将k放在lie数组中;遍历完成后判断lie数组,如果说谎人数等于2并且这两个说谎的人一个是好人一个是狼人(即a[lie[0]] + a[lie[1]] == 0)表示满足题意,此时输出i和j并return,否则最后的时候输出No Solution~


AC 代码

#include<bits/stdc++.h>#include<cmath>#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007usingnamespacestd;
typedeflonglongll;
intmain()
{
intn,b;
scanf("%d",&n);
vector<int>v(n+1);
for(inti=1;i<=n;i++) scanf("%d",&b), v[i]=b;
for(inti=1;i<=n;i++)
    {
for(intj=i+1;j<=n;j++)
        {
vector<int>a(n+1,1), lie;
a[i]=a[j]=-1; // 狼人for(intk=1;k<=n;k++)
if(v[k]*a[abs(v[k])]<0) lie.push_back(k);
if(lie.size()==2&&a[lie[0]]+a[lie[1]]==0)
            {
printf("%d %d\n",i,j);
return0;
            }
        }
    }
puts("No Solution");
return0;
}
目录
相关文章
什么是二进制?二进制怎么算?
什么是二进制?二进制怎么算?
1753 1
|
存储 SQL 关系型数据库
MySQL学习 [第二天]——数据库的基本操作 Ⅱ
从零开始学习MySQL,本期内容主要包括查看数据表结构、修改数据表和删除数据表操作。
355 0
MySQL学习 [第二天]——数据库的基本操作 Ⅱ
|
数据安全/隐私保护 Python
python100道经典例题——第七天
python100道经典例题——第七天
|
2天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。
|
6天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用
|
9天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
3天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
303 192