自定义博客皮肤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 3075

原创 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 1301

原创 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 826

原创 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 1100

原创 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 435

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

关于几种类型的详情,请跳转至该博客 题集: C - Calendar Game D - Game E - Nim or not Nim? F - Coin Game G - Being a Good Boy in Spring Festival H - Incredible Chess I - A Multiplication Game J - Crazy Calendar K - Game of Hyper Knights L - Aladdin and the Game of Bracelets M

2021-02-10 18:27:33 694

原创 博弈论入门讲解

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

2021-02-10 12:38:59 776

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

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

2021-02-10 09:01:54 375

原创 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 206

原创 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 213

原创 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 332

原创 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 314

原创 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 251

原创 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 187

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

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

2021-02-09 20:24:30 440

原创 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 297

原创 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 355

原创 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 375 1

原创 2-SAT专栏

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

2021-02-01 16:41:18 214

原创 差分约束专题

关于差分约束的相关定义,这篇博客推荐看一下 何为差分约束 接下来通过些题目来实战一下 layout layout 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 232

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

题目 A B C D E F G H I J K L Solved ♠\spadesuit♠ ⊘\oslash⊘ ♠\spadesuit♠ ♠\spadesuit♠ ∙\bullet∙ ♠\spadesuit♠ ∙\bullet∙ ♠\spadesuit♠ ♠\spadesuit♠比赛时通过;∙\bullet∙:赛后通过;⊘\oslash⊘ :比赛时尝试了未通过;∘\circ∘:比赛时未尝试 A. August 开场签到题,题意就是求题目中的图形面积,一眼看下去,直觉爱心的下...

2020-12-02 23:21:08 894

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

题目 A B C D E F G H I J K L Solved ♠\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 282

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

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

2020-11-22 14:21:00 424 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 305

原创 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 200

原创 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 285

原创 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 488

原创 Free restricted flights (拆边建图)

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

2020-10-09 08:47:27 156

原创 2020 ICPC Universidad Nacional de Colombia Programming Contest

题目 A B C D E F G H I J K L M N solved ∙\bullet∙ ∙\bullet∙ ∙\bullet∙ ♠\spadesuit♠ ∙\bullet∙ ♠\spadesuit♠ ♠\spadesuit♠ ∙\bullet∙ ♠\spadesuit♠ ♠\spadesuit♠比赛时通过;∙\bullet∙:赛后通过;⊘\oslash⊘ :比赛时尝试了未通过;∘\circ∘:比赛时未尝试 A.Approach 这题有个坑点,首先三分算法肯定是想得到的...

2020-10-05 20:30:31 911

原创 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 320

原创 队内训练(一)

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 267

原创 队内训练(三)

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 148

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

Problem Description You 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 190

原创 杭电多校部分习题

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

2020-08-12 22:22:27 275

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

Description ZC 家所在的小区住着很多学妹,为了方便和学妹们联络感情,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 250

原创 无题II hdu-2236

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

2020-08-04 09:19:02 241

原创 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 192

原创 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 134

原创 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 311

原创 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 1294

空空如也

空空如也

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

TA关注的人

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