牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇
https://ac.nowcoder.com/acm/contest/218/B
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
「生命在各处成长。我的族人只是在寻找成长最旺的地方。」 ——妮沙瑞文

奥札奇军团降临!赞迪卡陷入危机!无尽轮回钨拉莫和真理屠夫寇基雷带领着这群庞大的掠食者在赞迪卡肆意破坏。旅法师妮莎瑞文必须要阻止这一切。
在赞迪卡时空的一角,有 n 个寇族的部落。为了抵御奥札奇的进攻,这些部落之间联系密切。在任意两个部落之间都有一条直接道路相连接。换句话说,这 n 个部落与若干条道路构成了一张完全图。
现在,奥札奇军团已经占领了 1 号寇族部落并停留在此处。而钨拉莫与寇基雷两王却开始了游戏(伊莫库大姐快来管管)。游戏的规则是这样的:钨拉莫与寇基雷两王轮流带领奥札奇军团移动一次。每次可以从一个寇族部落通过一条未被腐蚀的道路移动到另一个寇族部落。任何移动必须在这 n 个寇族部落及其道路中进行。由于奥札奇对法术力的吞噬,奥札奇军团行经的道路都会被腐蚀。最后,在规则的限制下,奥札奇军团将无路可走。此时,将带领军团进行下一步移动的奥札奇之王将输掉这个游戏。钨拉莫先手。
钨拉莫与寇基雷作为奥札奇三祖中的两者,自然拥有超高的智力。所以你可以认为,他们都将以最优决策进行游戏。
游戏的赢家将率领军队与妮莎作战,而妮莎还在赶来的路上。所以请你先观察这个游戏,到时便可以告诉妮莎谁会是她的对手。
输入描述:
本题有多组测试数据。
第一行一个正整数 T ,表示数据组数。
接下去 T 行,每行一个数 n ,表示寇族部落的个数。
输出描述:
输出共 T 行,每行一个字符串 "Ulamog, the Infinite Gyre" 或 "Kozilek, Butcher of Truth" 表示胜利者(去掉括号)。前者为无尽轮回钨拉莫,后者为真理屠夫寇基雷。
示例1
输入
2
1
3
输出
Kozilek, Butcher of Truth
Ulamog, the Infinite Gyre
说明
- 当 n=3 时,钨拉莫可以率领军团从 1 走到 2 ,之后 的边不能再走了。
- 下一步寇基雷只能带领军团移动至 3 ,之后 的边不能再走了。
- 最后钨拉莫只要将军团移回 1 ,寇基雷就无路可走了。
备注:
1 ≤ T ≤ 2000
1 ≤ n ≤ 2000
分析
首先看完题第一感觉,蜜汁题目,然后反应过来是博弈,从n=1开始算,123分别是KUU胜利,从4开始,在这里引入四面体来等效点,比如
从1到2的箭头用来表示此条边

然后此时轮到k走,可以发现k从2走到3和k从2走到4是一样的,所以假设k从2走到3,由于u是绝对聪明的,所以u的两个选择3->1和3->4,在做题的时候应该是分析两种情况,在这里只分析3->1,也就是必胜的情况,


当u从3->1时,k只有一种选择也就是1->4,在之后u就可以走4->2,让k无路可走,因为在这个过程中,k要么只有一种选择要么就走几个点都是等价的,所以u采取最佳策略的时候,k是没有机会胜利的,这也就是博弈的想法,当两个人都绝对聪明,全部采取最佳策略,最后的胜利者会是谁,分析此过程。
所以整个题目在n较大的时候同理只需要把k逼入一个死角里就可以了,而这个是很简单u可以实现的策略,所以只有当n=1时k胜利,其余时候都是u胜利。
AC代码:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <time.h>
#include <queue>
#include <string.h>
#define sf scanf
#define pf printf
#define lf double
#define ll long long
#define p123 printf("123\n");
#define pn printf("\n");
#define pk printf(" ");
#define p(n) printf("%d",n);
#define pln(n) printf("%d\n",n);
#define s(n) scanf("%d",&n);
#define ss(n) scanf("%s",n);
#define ps(n) printf("%s",n);
#define sld(n) scanf("%lld",&n);
#define pld(n) printf("%lld",n);
#define slf(n) scanf("%lf",&n);
#define plf(n) printf("%lf",n);
#define sc(n) scanf("%c",&n);
#define pc(n) printf("%c",n);
#define gc getchar();
#define re(n,a) memset(n,a,sizeof(n));
#define len(a) strlen(a)
#define LL long long
#define eps 1e-6
using namespace std;
int main(){
int T = ;
s(T);
int n = ;
while(T --){
s(n);
if(n == ){
puts("Kozilek, Butcher of Truth");
}else{
puts("Ulamog, the Infinite Gyre");
}
}
}
感想:
这道题目主要考察逻辑思维能力,在我自己做的过程中也曾想过是否与完全图的边数的奇偶有关,然后算到n=4的时候意识到无法形成一个一笔画图的时候否定了这个猜想,又想到了七桥问题,每个点的奇偶性影响是否可以’一笔画,在n=5的时候我算错算是k胜利,所以走了一些弯路,总而言之还是一道好题。
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B的更多相关文章
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 牛客练习赛31 D神器大师泰兹瑞与威穆
双链表搞完了 #include<bits/stdc++.h> using namespace std; #define maxn 1000005 int tot,bac[maxn],fa[ ...
- 牛客练习赛31 D 最小相似度
最小相似度 链接 分析: 转化为求1的个数,这样两个串不同的位置的个数就是1的个数.那么对于一个二进制串x,它的贡献就是max{x与s[i]异或后0的个数}=>max{m-x与s[i]异或后1的 ...
- 牛客练习赛42 C 出题的诀窍 (贡献,卡常)
牛客练习赛42 C 出题的诀窍 链接:https://ac.nowcoder.com/acm/contest/393/C来源:牛客网 题目描述 给定m个长为n的序列a1,a2,-,ama_1 , a_ ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
随机推荐
- Scrapy实战篇(二)之爬取链家网成交房源数据(下)
在上一小节中,我们已经提取到了房源的具体信息,这一节中,我们主要是对提取到的数据进行后续的处理,以及进行相关的设置. 数据处理 我们这里以把数据存储到mongo数据库为例.编写pipelines.py ...
- git之sourceTree操作流程
1x.sourceTree的使用流程 12.Git管理工具对比(GitBash.EGit.SourceTree) 11.SourceTree使用SSH克隆码云项目 ====== 1x.source ...
- mysql修改root用户的登录密码
修改mysql root用户登录密码的方法有很多,网上可以查找到相关的资料 我通过上网查询以后实验成功的方法是使用下面的sql语句进行修改 UPDATE user SET Password = PAS ...
- gitea 源码阅读笔记 002 生成无依赖单文件可执行包
gitea bindata static gitea 可以通过 make generate 生成一个单文件可执行程序, 该文件不需要任何其它依赖,直接可以单独执行. 对于用户的安装.升级和生成dock ...
- impala daemon启动失败
启动错误日志: perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: ...
- 对窗体操作的WM消息
WM_CREATE 0x0001 应用程序创建一个窗口 WM_DESTROY 0x0002 一个窗口被销毁 WM_MOVE 0x0003 移动一个窗口 WM_SIZE 0x0005 改变一个窗口的大小 ...
- vue打包
npm installnpm run devnpm run build @types/node npm install --save @types/node npm install @types/no ...
- 使用httpClient发送post请求连接restful接口
public static String httpPost(String url,String arg){ InputStream is; BufferedReader br; StringBuild ...
- activemq 的那些事1
#关于事务: activemq 遇到的不能消息确认的问题. Session session = connection.createSession(Boolean.FALSE, Session.AU ...
- SpringBoot 之热部署
默认情况下, 我们修改 class 或者 修改模板文件(templates目录 下面的文件) 等动态资源, 都不会立即自动生效. 在IDEA中, 我通过Ctrl + F9 , 仍然是无效. 当然, 静 ...