自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 2020-2021 ICPC - Gran Premio de Mexico - Repechaje

A. Atsa’s Checkers Board给定一个n∗mn * mn∗m大小的矩阵,在该矩阵内放置黑色白色的石头,要保证每个2∗22 * 22∗2的矩阵都有两个黑石头和两个白石头,问有多少种摆放方式可以发现当有两块颜色相同的石头摆放在一起的时候,整个矩阵的摆放方式就确定了可以发现第一行至少有一对颜色相同石子相连的方案数是1<<m−21 << m - 21<<m−2,而第一列至少有一对颜色相同石子相连的方案数是1<<n−21 << n

2021-03-20 17:25:53 2744

原创 2020-2021 ACM-ICPC Brazil Subregional Programming Contest

A. Sticker Album很显然的一道概率dp题,状态转移方程如下:dp[i]=(dp[i+A]+dp[i+A+1]+...+dp[i+B])/(B−A+1)+1dp[i]=(dp[i+A]+dp[i+A+1]+...+dp[i+B])/(B-A+1)+1dp[i]=(dp[i+A]+dp[i+A+1]+...+dp[i+B])/(B−A+1)+1要留意一下当 A=0A=0A=0 时候的特判:dp[i]=(dp[i+A+1]+...+dp[i+B]+B−A+1)/(B−A)dp[i]= (dp

2021-03-18 19:27:26 1104

原创 Northern Eurasia Finals Online 2020 队内训练

A. Almost Balanced Tree考虑一种做法,先分配权值为2的点,每次都将权值为2的点数二等分,若是偶数就往下分,否则自身先占用一个再往下分权值为2的点分配完后,对整一棵树的空位分配权值为1的点若不够分,则无解若多出来了,同样将1的个数二分往下#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int, int> pii;const int N

2021-03-08 11:01:47 695

原创 2020-2021 ACM-ICPC, Asia Seoul Regional Contest

B. Commemorative Dice简单题。要你求出摇色子获胜的最大概率是多少。两个色子的点数和都为212121,若摇出的色子点数大于对方,则算获胜。观察可得无论挑哪个色子获胜的概率都是相同的。利用mapmapmap会自动排序的特性O(N2)O(N^2)O(N2)遍历即可。利用了概率论的基础知识。#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int, int&gt

2021-03-06 13:29:03 967

原创 icpc2020济南站

A Matrix Equation利用列相互独立,将题目公式化简即可#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#include <iostream>#include <vector>#include <map>#include <queue>#include <bitset>#

2021-03-03 13:27:10 325

原创 ACM--博弈论入门--几种博弈游戏类型+题集

关于几种类型的详情,请跳转至该博客题集:C - Calendar GameD - GameE - Nim or not Nim?F - Coin GameG - Being a Good Boy in Spring Festival H - Incredible ChessI - A Multiplication GameJ - Crazy CalendarK - Game of Hyper KnightsL - Aladdin and the Game of BraceletsM

2021-02-10 18:27:33 512

原创 博弈论入门讲解

博弈论,即公平组合游戏,满足下列一些特征:一场游戏有两个玩家,两个玩家轮流行动,是经典的回合制游戏。两个玩家的移动按照规则移动,并且两玩家之间的移动不区分身份。两个玩家按照最优的决策行动,即给定一个局势,能够一开始就区分出先手必胜还是先手必败。巴什博弈尼姆博弈阶梯博弈斐波那契博弈现在先进入一个最经典的博弈类型:巴什博弈Brave Game HDU - 1846现在定义两个字母:NNN 为先手必胜, PPP 为先手必败。在该例题中,每次可以取1~m个石子,现在先假设能够取 m=3

2021-02-10 12:38:59 632

原创 Doubloon Game HDU - 4203 博弈论,NP关系推理

首先枚举 kkk ,先枚举当 kkk 为奇数的情况,当 k=1k=1k=1 的时候,显然 nnn 为奇数的时候先手必胜,此时需要走1步便可通往 PPP 点。当 k=3k=3k=3 的时候:下标0123456789状态PPPNNNPPPNNNPPPNNNPPPNNNPPPNNN同样当 k=5k=5k=5 的时候,状态表跟上图一样;可以发现当 kkk 是奇数的时候,永远满足 nnn 为奇数的时候先手必胜,并且1步可以通往 PPP 点;反之.

2021-02-10 09:01:54 172

原创 Aladdin and the Game of Bracelets LightOJ - 1344 博弈论,求sg函数

这道题显然就是要求每一个珠子串对应的 SGSGSG 值假设选取该珠子串中的一个权重 www ,拆分成1个或多个字串后,将这些子串的 SGSGSG 值的异或和,便是该珠子串到下一个状态的可达 SGSGSG 值标记。当最后子串里仅剩下一个珠子的时候,这个的子串 SGSGSG 值为1每次都递归的求出子串的 SGSGSG 值,最后按照 SGSGSG 的含义取 mexmexmex 即可详情请看代码#include <bits/stdc++.h>using namespace std;t.

2021-02-09 21:59:12 120

原创 Game of Hyper Knights LightOJ - 1315 博弈论,记忆化搜索求NP关系

给定一个图,可以根据图示进行6个方向移动,这里只有两个位置限制,最上方的 xxx 轴与最左方的 yyy 轴。求出每个棋子的 sgsgsg 值,最后将所有的 sgsgsg 值一起异或即可。求 sgsgsg 的时候进行记忆化搜索。具体详情请看代码#include <cstdio>#include <vector>#include <cstring>using namespace std;typedef long long ll;const int N =.

2021-02-09 21:17:40 131

原创 Crazy Calendar LightOJ - 1393 博弈论,阶梯博弈

此题题目只看最后一段即可。题目意思是可以将一个堆的任意石子移动到右端或者下端。可以发现最后所有的石子最终都汇入右下角的那一格当中。可以得出是阶梯博弈,定义右下角的格子为0号点,与0号点的曼哈顿距离(∣x1−x2∣+∣y1−y2∣|x_1-x_2|+|y_1-y_2|∣x1​−x2​∣+∣y1​−y2​∣)为奇数的是奇数堆,偶数的是偶数堆。最终答案将奇数堆的进行异或即可。#include <bits/stdc++.h>using namespace std;typedef long

2021-02-09 21:08:01 182

原创 A Multiplication Game HDU - 1517 博弈论,NP关系,记忆化搜索

题目是从 p=1p=1p=1 开始游戏,谁先到达 nnn 即为胜者。在代码当中,定义先手必胜 NNN 点的 sgsgsg 值为1,另外先手必败的 PPP 点为 -1。在博弈论当中,如果一个状态走到下一个状态的路径中存在 PPP 点,则该点的状态必定是 NNN 点;反之若下一个状态不存在 PPP 点,则这个状态为 PPP 点。定义初始值 sg[1]sg[1]sg[1] 为 P,对 nnn 进行记忆化搜索即可。详情请看代码#include <bits/stdc++.h>using nam.

2021-02-09 21:00:48 127

原创 Incredible Chess LightOJ - 1186 博弈论求sg函数

根据题目意思,现在假设先手即白棋向下走 xxx 步,那么后手黑棋也可以向下走 xxx 步,此时对于整个游戏而已没有任何的干涉。同样的后上即黑棋向上走 xxx 步,白棋跟着向上走 xxx 步也并不影响结局。所以取决定性的是白棋与黑棋之间的间隔。假设间隔数量为 xxx ,显然任意一个棋子可以在间隔中走任意步数,所以对应的 sg[x]=xsg[x]=xsg[x]=x,最后直接求答案即可。#include <bits/stdc++.h>using namespace std;typede.

2021-02-09 20:49:18 143

原创 Being a Good Boy in Spring Festival HDU - 1850 博弈论,利用异或的性质

由于在一堆中可以取任意张牌,所以对于一个堆的牌数量 xxx,有 sg[x]=xsg[x]=xsg[x]=x先求出总的游戏 SGSGSG 值 ans=sg[a1]⊕sg[a2]⊕...⊕sg[an]ans=sg[a_1]\oplus sg[a_2] \oplus...\oplus sg[a_n]ans=sg[a1​]⊕sg[a2​]⊕...⊕sg[an​]若 ans=0ans=0ans=0 则先手必败。反之,先手必胜。那么对应第一局的可走的路:假设有两堆牌 x,yx,yx,y,假设取 yyy 中的牌,.

2021-02-09 20:39:54 127

原创 Coin Game HDU - 3951 博弈论NP推理,利用镜像的对称性

首先,对于一种情况:n≤kn\le kn≤k的时候,直接先手必胜,一步全拿即可。当 k=1k=1k=1 的时候,此时若 nnn 为奇数,则先手必胜,为 NNN 点;若 nnn 为偶数,则先手必败,为 PPP 点。对于剩下的情况,则需要用镜面原理来探究了。首先对于先手,取了任意颗石子之后,后手可以根据剩余石子数量的奇偶性来进行选取,保证最后造成的两片对称。题目意思是只能够取连续的片段,所以在上面中,原本是一个环状的,先手取完之后形成了一个圆弧,后手再对这个圆弧分成一模一样的两片:若先手取完之后剩余的石.

2021-02-09 20:24:30 219

原创 Nim or not Nim? HDU - 3032 先通过sg打表,找出规律再 O(n) 解决

题意有两种选择:①移除堆里面的一些石子 ②将一个堆的石子分成两份由于这题 SIS_ISI​ 的范围在 231−12^{31}-1231−1 的范围内,无法进行 sgsgsg 函数的预处理,所以只能选择先将 sgsgsg 函数的一部分表打出来,找出规律再对每个数进行处理。根据题目意思,首先第一步可以得出对于 j∈[1,ai−1]j\in[1,a_i-1]j∈[1,ai​−1],有 vis[sg[j]]=truevis[ sg[j] ]=truevis[sg[j]]=true根据第二步,可以将一个堆分

2021-02-09 20:12:33 123

原创 Game HDU - 3389 阶梯博弈,找出规律即可

按照题目意思,选取几个点,最后得出的图如下:图片来源于此根据上图的规律,发现没有出度的点是1,3,41,3,41,3,4,换言之最后所有的石子都会归类到 1,3,41,3,41,3,4 这三个堆上,由此可得出这属于阶梯博弈。阶梯博弈的性质可以近似当成最后结果中,有些许堆的石子是无法被移出的,无论该堆的数量多少。根据阶梯博弈的性质,可以把 1,3,41,3,41,3,4 当成是阶梯博弈中的0号点,即偶数堆,其余的 modmodmod 6 !=1,3,4!=1,3,4!=1,3,4 的则是奇数堆。将奇

2021-02-09 19:57:05 174

原创 Calendar Game HDU - 1079 博弈论打表

题意给定一个包含年月日的日期,每次移动只能向未来移动一天或者一个月,若无法移动一个月(如1月31日移动2月份),那就不进行这次操作。由于数据给定的从1900年至2001年,只有100年的天数,上限不超过四万个天数,可以先预处理打表后 O(1)O(1)O(1) 查询得到,或者在线处理然后套个记忆化搜索,类似于 dpdpdp ,代码如下,采用记忆化搜索进行解决。在代码当中,定义先手必胜 NNN 点的 sgsgsg 值为1,另外先手必败的 PPP 点为 -1。在博弈论当中,如果一个状态走到下一个状态的路径

2021-02-09 19:42:28 266 1

原创 2-SAT专栏

2-SAT很多时候的应用场景是,给定一个事物,这个事物有两种状态选择。基本就是这个情况,详细的话,通过下面的样例与题集来进行更深入的理解。样例:Party-HDU 3062Katu Puzzle-POJ 3678实战:Get Luffy Out *-HDU1816 Go Deeper-HDU 3715中等题:Eliminate the Conflict-HDU 4115Bit Magic-HDU 4421Party-HDU 3062传送门这道题有两种矛盾关系:一对夫妻中只能一

2021-02-01 16:41:18 111

原创 差分约束专题

关于差分约束的相关定义,这篇博客推荐看一下 何为差分约束接下来通过些题目来实战一下layoutlayout poj-3169这题有两个不等式要求:对于ML个关系,有 SB−SA≤wS_B-S_A\le wSB​−SA​≤w对于MD个关系,有SB−SA≥wS_B-S_A\ge wSB​−SA​≥w其中 SiS_iSi​ 表示 iii 到原点的距离。由于题目还有另外两种情况,无解则输出-1,无解便是跑spfa出现负圈的情况无穷大则输出-2,便是通过以上关系并不能更新到第n个点,则说明第n点

2021-01-27 18:18:50 125

原创 The 15th Heilongjiang Provincial Collegiate Programming Contest--队内训练

题目ABCDEFGHIJKLSolved♠\spadesuit♠⊘\oslash⊘♠\spadesuit♠♠\spadesuit♠∙\bullet∙♠\spadesuit♠∙\bullet∙♠\spadesuit♠ ♠\spadesuit♠比赛时通过;∙\bullet∙:赛后通过;⊘\oslash⊘ :比赛时尝试了未通过;∘\circ∘:比赛时未尝试A. August开场签到题,题意就是求题目中的图形面积,一眼看下去,直觉爱心的下...

2020-12-02 23:21:08 736

原创 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest--队内训练

题目ABCDEFGHIJKLSolved♠\spadesuit♠∙\bullet∙♠\spadesuit♠♠\spadesuit♠∙\bullet∙∙\bullet∙♠\spadesuit♠ ♠\spadesuit♠比赛时通过;∙\bullet∙:赛后通过;⊘\oslash⊘ :比赛时尝试了未通过;∘\circ∘:比赛时未尝试A.Xu Xiake in Henan Province签到题#include<bits/stdc...

2020-12-01 16:13:51 159

原创 Largest Quadrilateral --凸包+旋转卡壳

题意这题的题目意思很显然,给出多个在二维平面的点,求这些点中所能形成的四边形的最大面积首先要进行的是求这些点的凸包,在凸包上所构建的四边形中存在最大的四边形面积在形成凸包后,有下列三种情况最终所形成的凸包是一条直线,即所有点都在一条直线上,此时形成的凸包的点的个数为2,形成的四边形面积为0最后形成的凸包的点只有三个,此时要构建的是一个凹四边形。那么直接枚举在凸包里面的点,求这个点与其中两个凸包上的点的最小面积。最后用凸包三角形的面积减去这个所求的最小三角形面积即可。形成的凸包点的个数 ≥4≥4

2020-11-22 14:21:00 261 1

原创 The 11th Zhejiang Provincial Collegiate Programming Contest

A.Pokemon Master传送门#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int, int> pii;template <typename T>inline void rd(T& x){ ll tmp = 1; char c = getchar(); x = 0;

2020-10-13 10:23:18 221

原创 Paint the Grid Reloaded (将联通块缩点+BFS)

传送门题意能够上下左右相通的并且颜色相同的块为一个整体,就是所谓的联通块。然后每次对联通块进行反转颜色操作,最后要求最小的步数使得图中所有的颜色相同。思路将所有能够相通的相同颜色进行缩点,形成联通块然后能够上下左右连通的联通块进行建边最后枚举所有的联通块,进行 bfsbfsbfs 标记操作,将所有的答案取最小值,就是最终答案#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef un

2020-10-09 19:54:00 130

原创 Deliver the Cake (拆点 dijkstra)

传送门这道题主要是建边麻烦,而稍微省点麻烦的就是拆点进行建边了,将所有 MMM 的点拆成左跟右,按部就班按照题目意思进行建边#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;template <typename T>inline void read(T &x){ int tmp = 1;char c = getc

2020-10-09 08:59:36 188

原创 Environment-Friendly Travel ( 二维dijkstra)

传送门这道题题意就不说了,主要是有一个二维数组进行 visvisvis 标记,因为该段路程的长度上限 BBB 仅仅只是100,所以完全可以用数组标记dijkstradijkstradijkstra 的优先队列排序是先二氧化碳排放量,再进行长度,vis[point][length]vis[point][length]vis[point][length] 表示在点 vvv 长度为 lenlenlen 的已经访问过了,直接跳过这个情况,剩下的就按部就班的 dijkstradijkstradijkstra#

2020-10-09 08:55:08 373

原创 Free restricted flights (拆边建图)

传送门这道题讲的是两个人去旅行,然后他们会在一个地方(不是两者的起点)碰头,并且最后还要回到各自的起点,然后有 kkk 张免费的机票,求总的价值以及他们可能会碰头的其中一个点。由于有 kkk 张免费的机票,并且难以模拟在哪一趟兑换这张免费机票,所以采用拆边的做法,将一段路拆分成 k+1k+1k+1 段,第一段表示需要付费的票,后面分别表示使用第一张免费票的路线,第二张…第 kkk 张这里后面回到起点的做法,直接在原来给出的建图的基础上建立反边即可,便把起点当作源点,按部就班的跑一遍 dijkstrad

2020-10-09 08:47:27 99

原创 2020 ICPC Universidad Nacional de Colombia Programming Contest

题目ABCDEFGHIJKLMNsolved∙\bullet∙∙\bullet∙∙\bullet∙♠\spadesuit♠∙\bullet∙♠\spadesuit♠♠\spadesuit♠∙\bullet∙♠\spadesuit♠ ♠\spadesuit♠比赛时通过;∙\bullet∙:赛后通过;⊘\oslash⊘ :比赛时尝试了未通过;∘\circ∘:比赛时未尝试A.Approach这题有个坑点,首先三分算法肯定是想得到的...

2020-10-05 20:30:31 726

原创 Contest of Rope Pulling-hdu 6804-随机排序

Rope Pulling, also known as Tug of War, is a classic game. Zhang3 organized a rope pulling contest between Class 1 and Class 2.There are n students in Class 1 and m students in Class 2. The ith student has strength wi and beauty-value vi. Zhang3 needs to

2020-08-18 09:33:35 215

原创 队内训练(一)

Fibonacci Sum-HDU 6755传送门思路对着式子瞎弄一顿,最后把通项公式套进去发现ans=∑i=0n15×[(1+52)ic−(1−52)ic]k=15∑i=0n([1+52]ic+[−(1−52)ic])kans=\sum_{i=0}^{n}\frac{1}{\sqrt{5}}×[(\frac{1+\sqrt{5}}{2})^{ic}-(\frac{1-\sqrt{5}}{2})^{ic}]^k\\=\frac{1}{\sqrt{5}}\sum_{i=0}^{n}([\frac{1+

2020-08-17 13:45:15 195

原创 队内训练(三)

Road To The 3rd Building - HDU_6827传送门思路先进行一遍处理前nnn项和 sum(n)sum(n)sum(n)对每个例子全部写一遍发现,每一个数都有特定的出现次数,在一段n/2n/2n/2的权中,第一个只贡献一次,第二次贡献两次,依此类推…所以可得每次的cnt[i]=cnt[i−1]+(sum[n−i+1]−sum[i−1])cnt[i]=cnt[i-1]+(sum[n-i+1]-sum[i-1])cnt[i]=cnt[i−1]+(sum[n−i+1]−sum[

2020-08-15 17:18:53 93

原创 组合数学--Set1 hdu-6825

Problem DescriptionYou are given a set S=1..nS={1..n}S=1..n. It guarantees that n is odd. You have to do the following operations until there is only 1 element in the set:Firstly, delete the smallest element of SSS. Then randomly delete another element f

2020-08-14 09:57:56 109

原创 杭电多校部分习题

Tokitsukaze and Rescuehdu6797_传送门思路对最多5个边进行删除操作,即将边权值设置成 infinfinf即可对于每一次的删边操作,枚举每一次跑的最短路径中的 n−1n-1n−1条边最后在删了k次边后再跑一遍 dijkstradijkstradijkstra由于边比较小,直接使用邻接矩阵forforfor循环跑一遍即可,身边有人用链式向前星会莫名超时,我也不懂,8s是绰绰有余的#include <bits/stdc++.h>using namespa

2020-08-12 22:22:27 205

原创 最短路-HZNUoj-2798 (使用线段树来进行区间压缩)

DescriptionZC 家所在的小区住着很多学妹,为了方便和学妹们联络感情,ZC 大佬决定在原有的道路上,再建一些道路。由于ZC 太强了,它可以搭建以下两种道路:111 uuu LLL RRR www:对于区间 L,R 中的每一个位置 i,搭建一条 u−>iu -> iu−>i 的长度为 w 道路。222 LLL RRR uuu www:对于区间 L,R 中的每一个位置 i,搭建一条 i−>ui -> ui−>u 的长度为 w 道路。已知 ZC 的家在 1 号

2020-08-10 15:29:01 175

原创 无题II hdu-2236

这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小。这道题是道不错的二分图题首先要对答案进行二分了,这个很自然就想到了;但在后面对二分是否符合的判断思路卡住了后面才想到使用枚举从(最小值,最小值+二分的差值)枚举这个区间进行行列匹配。好题!!!详情见如下代码#include <cstdio>#include <algorithm>#include <cstring>#include

2020-08-04 09:19:02 163

原创 poj 2135--Farm Tour--费用流

#include <cstdio>#include <algorithm>#include <cstring>#include <vector> #include <queue>using namespace std;const int N=1e3+10;const int inf=0x3f3f3f3f;struct Edge{ int from,to,cap,flow,w;};vector<Edge>ed

2020-08-01 13:38:45 138

原创 Drainage Ditches --网络流

① dinic#include <bits/stdc++.h>using namespace std;const int N=2e2+10;const int M=4e2+10;const int inf=0x3f3f3f3f;int head[N],cnt;struct edge{ int next,to,cap,flow;}e[M];void add(int u,int v,int cap,int flow){ e[cnt].to=v; e[cnt].next=he

2020-08-01 10:03:34 78

原创 Game of Hyper Knights ---LightOJ - 1315

这道题有两个坑:①棋子的移动方向,不存在返回走的路,所以经过的点不需要进行vis标记②这个棋盘只有上界和左界,题目只是给出点x,y的坐标范围,没给出棋盘范围 找bug找吐了,所以按照棋子从(500,500)往右上方走,右界应是750,从(500,500)往左下方走,下界是750数组开大一点还是有好处的其他的算是普通sg函数的递归写法。sg函数的递归写法需要注意一个点int getSG(int x,int y){ if(sg[x][y]!=-1) return sg[x][y]; bool vi

2020-07-29 18:53:27 152

原创 hznu-1892-永远的17岁

#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int main() { int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); if (n < 15) puts("-1"); else printf("%d\n", n - 7); } return 0;}

2020-06-28 10:01:19 1089

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除