闲来无事刷水题、简单博弈论专题、sg函数、洛谷

今天闲来无事,不想刷codeforces了,到洛谷提高组训练营找几道水题刷着玩玩(虽然自己早已过了打OI的年纪)~

简单博弈论专题

P1199 三国游戏

这么考虑,由于电脑总是不能让我搭配出当前能搭配出的最大的组合,也就是说我不管选哪个英雄,都不可能匹配出该英雄能搭配出的最大的默契值,那么我最大能搭配出的默契值就是所有英雄匹配中,次大默契值的最大值。
假设有abcda、b、c、d四位英雄
aa能匹配的最大值为aM次大值为amam
bb能匹配的最大值为bM次大值为bmbm
cc能匹配的最大值为cM次大值为cmcm
dd能匹配的最大值为dM次大值为dmdm

假设其中am>bm>cm>dmam>bm>cm>dm

那么我能得到的最大可能值也就是amam了。
下面证明,电脑能组合出的最大值一定比amam要小。
那么我一开始选择aa,电脑一定会选择与a能形成aMaM的值的英雄,假设是dd
然后我再选c,这里假设caamc与a组合得到am
那么电脑会选择bb
反证法开始了:
假设dbt>am>dm
daaM>am>dmd与a形成的默契值为aM>am>dm
这样的话dmdm不可能是dd能匹配到的次大值,矛盾。
所以t<am
本次电脑不会选择到比amam更大的数。
随后我们只需要破坏掉电脑构造成最大的组合就可以了。

P1288 取数游戏II

如果出发点靠着0边,那么只能往一个方向走,并且走过的边的值一定要减到0,不然对面会逆过来,然后把边减到0,这样我方就输了。

不靠0边的时候,如果沿着某个方向走会赢,那么就把沿路经过的边设置为0。
如果沿着那个方向走都不会赢,你任取一个方向走的时候不把边设置为0,对方在下一次走的时候也会继续沿着这个方向,并把下一条边设置成0,你还是要一直沿着这个方向走。

所以不管怎么样,经过的边都会变成0,也就是说一旦选定方向了,就只能一直走。
所以结果很固定,你只要把2个方向都老老实实沿着走下去,有一种情况能赢就能赢,否则就不能赢。

P1290 欧几里德的游戏

典型的辗转相除法。

假设这时候状态是(a,b)a>b(a,b)满足a>b
如果[a/b]=1[a/b]=1那么(a,b)(a,b)(b,a%b)(b,a%b)的状态是相反的。
如果[a/b]=k>1[a/b]=k>1那么就是必胜的,因为如果(b,a%b)(b,a%b)是必败态,那么a直接剪去k个b,否则的话,a剪去k-1个b。很简单是不是。

P2148 [SDOI2009]E&D

山东的省选题,中规中矩。
由于多个组是独立游戏,所以Nim博弈,直接求出所有组的sg函数,然后异或就可以了,如果异或值为0则必败,否则必胜。
由于每个二元组(a,b)(a,b)的范围都是1e91e9,这样的话,sg函数的复杂度太大了,所以要想想办法。
方法就是:打表找规律!2333
规律如下:

int sg(int x,int y){if(x == 1 && y == 1)return 0;if(x%2 && y%2)return 0;if(x%2) swap(x,y);if(y%2 == 0){return sg(x/2,y/2)+1;}else{return sg(x,y+1);}
}

P1247 取火柴游戏

简单的不像话,跟上面的题难度一样,方法也一样,求sg函数,然后异或。
不同的地方是,这个要求第一步的方案。

在必胜态的时候,异或得到的值为ans。
我们第一步要做的就是拿掉一堆中的某些火柴,然后使异或值变为0。
假设我们要拿掉第i堆的某些火柴,那么这一堆应该剩下的火柴的数目就是ansans xor n[i]n[i],拿走的火柴数目就是n[i]n[i]− (ansans xor n[i]n[i])。
从小到达枚举堆数,找一个合法的情况就好了。

P2575 高手过招

这到也是sg函数➕异或。
不得不说sg函数是博弈论的大杀器呀。
求sg函数的方法就不说了,注意的点:

  • 这题要用到位运算,压缩状态,不然时间、空间可能不够。
  • 开O2!!!

代码

#include <iostream>
#include <cstdio>
#include <set>
#include <cstring>
#include <unordered_map>
using namespace std;
const int maxn = 2e6;
int T,n,m;
int sg[maxn];
int grundy(int status){if(sg[status] != -1)return sg[status];unordered_map<int,int> mp;for(int i = 19;i > 0;--i){if(!(status&(1<<i))) continue;int j = i-1;for(;j >= 0;--j)if(!(status&(1<<j)))break;if(j == -1) continue;mp[grundy(status ^ ((1<<i) + (1<<j)))] = 1;;}for(int i = 0;;i++){if(!mp[i])return sg[status] = i;}
}
int main(){cin>>T;memset(sg,-1,sizeof(sg));while(T--){scanf("%d",&n);int ans = 0;for(int i = 1;i <= n;++i){scanf("%d",&m);int status = 0;for(int j = 1;j <= m;++j){int p;scanf("%d",&p);status |= 1<<(20-p);}ans ^= grundy(status);}if(ans) puts("YES");else puts("NO");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医院(jzoj 1611)

医院 题目大意&#xff1a; 有n个城市&#xff0c;有m条线路使他们相连&#xff08;有向&#xff09;&#xff0c; 在一些城市中建立医院&#xff0c;相连的城市只能有一间医院&#xff0c;每个医院可以派医生去别的城市&#xff0c;当医生走的线路>3时&#xff0c;他们会…

2019.01.24【NOIP普及组】模拟赛C组

总结 这一次的分数&#xff1a;1002562.562.5250 第一题老实打完&#xff0c;100分&#xff0c;第二题蒙点25分&#xff0c;第三题只打了Floyed&#xff0c;还有一部分&#xff08;匈牙利算法&#xff09;没打&#xff0c;第四题蒙点特判&#xff0c;62.5,&#xff08;说实在我…

nssl1453-Fibonacci数列【矩阵乘法,线段树】

正题 题目大意 给出nnn和si(i∈[0..n−1])s_i(i\in[0..n-1])si​(i∈[0..n−1])&#xff0c;对于大部分情况有sxsx%ns_xs_{x\%n}sx​sx%n​。 有递推式FiFi−1si−1Fi−2si−2F_iF_{i-1}s_{i-1}F_{i-2}s_{i-2}Fi​Fi−1​si−1​Fi−2​si−2​ 有mmm个情况的sx!sx%ns_x!s_{…

Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控

在大型网站系统设计中&#xff0c;随着分布式架构&#xff0c;特别是微服务架构的流行&#xff0c;我们将系统解耦成更小的单元&#xff0c;通过不断的添加新的、小的模块或者重用已经有的模块来构建复杂的系统。随着模块的不断增多&#xff0c;一次请求可能会涉及到十几个甚至…

洛谷 P1967货车运输 并查集+贪心 不需要用LCA!

题目链接 题目链接 题解 要求所有的路径中最小边长的最大值&#xff01; 我们贪心的加边&#xff0c;依照边从大往小的方式往里添加&#xff0c;然后合并并查集。 每次当查询分布在两个待合并的并查集的时候&#xff0c;当前的边长就是这次查询的答案。 我们对每个并查集…

【图论】【最短路】【SPFA】香甜的黄油 Sweet Butter (luogu 1828)

香甜的黄油 Sweet Butter luogu 1828 题目大意&#xff1a; 有n头奶牛&#xff0c;他们在不同的牧场中&#xff0c;他们之间有一些路&#xff0c;现在要让他们去一个地方吃黄油&#xff0c;使他们的总距离最小 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法&…

P1081 开车旅行 倍增 洛谷

题目连接 题意 题目已经说的hin明确了。 题解 我们要求出从每个点出发&#xff0c;小A要走的城市和小B要走的城市。 我们把ii以后的所有点的海拔加入到set" role="presentation" style="position: relative;">setset&#xff0c;然后拿H[i]H[…

nssl1454-最短路【并查集,贪心】

正题 题目大意 nnn个点&#xff0c;每个点可以走到[ai,n][a_i,n][ai​,n]&#xff0c;每个点可以从[bi,n][b_i,n][bi​,n]到达。 求disi,j∗(ij)dis_{i,j}*(ij)disi,j​∗(ij)的异或和 解题思路 首先我们可以知道肯定是先往后跳再往前走最优&#xff0c;因为如果先往前再往后…

.NET Core 跨平台执行命令、脚本

一.前言我们可能会遇到需要在程序中执行一些系统命令&#xff0c;来获取一些信息&#xff1b;或者调用shell脚本。.NET Core 目前已经可以跨平台执行&#xff0c;那么它如何跨平台执行命令呢&#xff0c;请看下面的讲解。二.ProcessStartInfo、Process 类介绍我们主要用到的两个…

nssl1458-HR 的疑惑【枚举】

正题 题目大意 给出nnn&#xff0c;求[1..n][1..n][1..n]中有多少个数可以被ab(b>1)a^b(b>1)ab(b>1)表示 解题思路 首先如果bbb等于222&#xff0c;那么可以被表示的数就是n\sqrt nn​个 bbb不是质数时&#xff0c;显然所以的数都可以被一个bbb是质数的情况表示。 …

性能是.NET Core的一个关键特性

关键要点.NET Core是跨平台的&#xff0c;可运行在Windows、Linux、Mac OS X和更多平台上&#xff1b;与.NET相比&#xff0c;发布周期要短得多。大多数.NET Core 都是通过NuGet软件包交付的&#xff0c;可以很容易地发布和升级。更快速的发布周期对性能提升工作以及改进诸如So…

简单的数学问题 洛谷 P1414 又是毕业季II

题意 给出n个数字&#xff0c;询问从中挑出k个数字&#xff0c;最大可能的公共gcd是多少。 题解 k个数的gcd一定出现至少k次。 我们遍历所有的数并对每个数字求它所有的因子&#xff0c;统计各个因子出现的个数。 给定k时&#xff0c;我们的答案就是所有出现次数>k的因…

【枚举】连续自然数和(jzoj 2102)

连续自然数和 题目大意&#xff1a; 输出一个n&#xff0c;求出所有相加等于n的连续自然数序列 样例输入 10000 样例输出 18 142 297 328 388 412 1998 2002 数据范围限制 10 < M < 2,000,000 解题思路&#xff1a; 这道题的正解的时间复杂度是o(2n)o\left …

nssl1460-逛机房【bfs】

正题 题目大意 nnn次询问&#xff0c;给出一个数xxx&#xff0c;每次可以进行操作 修改其中一个位&#xff0c;去掉前导零删掉其中一个位&#xff0c;去掉前导零 询问最少步骤使得xxx变为一个完全平方数 解题思路 我们可以从完全平方数开始广搜&#xff0c;操作变为 加入一…

将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1 RC 1

微软发布了 .NET Core 2.1 RC 1 &#xff0c;虽然只是 Release Candidate 版&#xff0c;但已经可以在生产环境中使用。NET Core 2.1 RC is supported by Microsoft and can be used in production..NET Core 2.1 的性能大提升早让人垂涎三尺&#xff0c;看到这个消息后&#x…

洛谷P1169 树上分组背包

题解 第一次写树上分组背包的题目。 什么是分组背包&#xff1f; 分组背包就是将物品进行分组每组内部只能选择一类物品。 for(int i 1;i < N;i){for(int j 0;j < V;j){for(int k 0;k < item[I];k){dp[i][j] max(dp[i][j],dp[i-1][j-v[i][k]]w[i][k]); }} …

【dfs】简单游戏(jzoj 2121)

简单游戏 题目大意 原本有n个数字&#xff0c;第1,2个相加&#xff0c;第2&#xff0c;3个相加……第n-1,n个相加&#xff0c;由此得出一个长度为n-1的新序列&#xff0c;然后不停重复&#xff0c;最后得出一个t&#xff0c;现在给出一开始的n和t求符合的序列&#xff08;字典…

nssl1459-空间简单度【扫描线,线段树】

正题 题目大意 nnn个点的一颗树&#xff0c;合法路径定义为一条路径上每个点的编号相差大于KKK。求合法路径数 解题思路 首先我们可以求不合法的路径数&#xff0c;这样我们就有了K∗nK*nK∗n个不合法&#xff08;即不能在同一个路径上&#xff09;的点对。 然后这题就和之前…

ASP.NET Core Identity Hands On(2)——注册、登录、Claim

上一篇文章&#xff08;ASP.NET Core Identity Hands On&#xff08;1&#xff09;——Identity 初次体验&#xff09;中&#xff0c;我们初识了Identity&#xff0c;并且详细分析了AspNetUsers用户存储表&#xff0c;这篇我们将一起学习Identity 默认生成的样板代码的注册与登…

洛谷 动态规划一日游 P2577、P1070、P2051

记 2018年3月19日 贼颓呢&#xff0c;一天就写了两道DP&#xff0c;还都不会写&#xff0c;这可GG。 动态规划真的难且有趣&#xff0c;算法题中动态规划占到了很大的比例&#xff0c;而且动态规划往往是辅助解决一些其他类型问题的基础&#xff0c;加深加强对动态规划问题的…