自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 2311 Cutting Game (二维Multi-Nim)

题意:给你一个n*m的矩形,之后两个人轮流切谁切出1*1的矩形谁赢,问你给你n*m的矩形先手是胜利还是失败思路:一个二维的SG函数打一个表就好了代码:代码:#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace st...

2018-04-23 21:31:10 127

原创 HDU 3032 Nim or not Nim? (Multi-SG)

题意:普通nim+可以将大于2的一堆石子拆成两堆。思路:叫做Multi-SG ,也是可以用SG函数去求一下,由于n很大所以我们可以小范围的打个表找个规律规律就是SG[i] = i + 1 (i % 4 == 3) SG[i] = i  - 1 (i%4 == 0)SG[i] = i  (i%4 ==2 || i % 4 == 3)上代码把:#include <iostream>#in...

2018-04-23 20:34:06 158

原创 BZOJ 1022 小约翰的游戏John (sj函数)

题意: 反nim博弈,取到最后一颗石子的人输。思路:来自贾志豪的IOI 2009 论文,有空大家可以看一下感触很深,直接出结论:            对于一个SJ游戏,先手必胜当且仅当:(1) 游戏的的SG函数不为0,且游戏中的某个单一游戏的SG函数大于1            (2)游戏的SG值为0,且没有单一游戏的SG值大于1 ‘        套上板子就过了上代码:#include &lt...

2018-04-23 19:02:46 243

原创 HDU 1848 Fibonacci again and again(SG 函数裸)

题意: 中文 不解释思路:裸的SG,首先打一个Fibonacci的表,之后打一个SG的表,之后三个nim和一下就是答案代码:#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int max...

2018-04-23 17:26:04 93

原创 POJ 1704 Georgia and Bob(nim 博弈的变形)

题意:排成直线的格子上放有n个棋子,第i个棋子在p[i]的格子上,G和B 分别选择一个棋子向左移动,每次可以移动任意格,但是不能反超其他格子,也不能让两个棋子放在一个格子里面,G先,无法移动的一方输吗,问你谁会赢?思路:我们把每个格子的差看成nim里面的石子的堆数,那么我们每次向左移动石子的时候对于当前石子的左边,就可以看成是往每堆石子里面挑出任意个石子了,对于当前石子的右边其实就是往那堆石子里面...

2018-04-23 16:59:08 125

原创 UVA - 12291 Polyomino Composer (模拟)

题意: 给你两个图,一个n*n一个m*m,现在告诉你这个n*n的图里有没有2个m*m的图思路: 模拟,我们先得到小图的第一个*的位置,之后遍历大图,每次一个大图上有*的话,我们就进入判断,得到小图的第一个*和大图的*的差,之后遍历小图的*号,之后加上差之后就是大图的*,每次匹配上一个我们就把大图的*变成.如果有一个不匹配就说明我们不可能得到这个图错了,上代码把,代码讲的很清楚#include &l...

2018-04-20 15:12:13 162

原创 CodeForces - 471D MUH and Cube Walls(差分+kmp)

题意:给你两组序列,第一个序列同时减去一个数,如果变化的序列和第二个序列相等的话匹配数加1问你最多的匹配数。思路: 我们把序列1和序列2同时差分一下,之后做一下kmp就好了,那么就有人问了,博主博主请问差分是什么?那,差分在这道题里就是第i个数和第i-1个数做差就好了,因为你会发现,比如样例4 5 5 4 3 他的差分是 1 0 -1 -1 而第二个序列 3 4 4 3 2 他的差分是 1 0 -...

2018-04-18 21:32:49 173

原创 HDU - 5918 Sequence I (KMP)

题意:给你两个序列,一个文本串一个匹配串,但是匹配的模式不是一个一个的匹配,而是隔p个匹配一次问你最大的匹配数量思路:构建nex数组都一样,我们把他拆成p个串就好了,之后跑一边kmp就可以出答案了代码:#include <string.h>#include <stdio.h>#include <algorithm>#include <iostream...

2018-04-18 17:56:32 174

原创 HDU - 3336 (kmp+dp)

题意:给你一个串,问你他的所有前缀和他本身匹配的次数mod10007。比如 abab 他的子串有a,ab,aba,abab,他们的匹配次数分别是 2,2,1,1,思路:我们知道nex[i]表示的是你在第i位的时候匹配的最长的相等前后缀的长度(也就是说你在第i位的时候,和你相等的最长相等的前后缀在nex[i]的位置),那么我们就可以定义dp[i]表示的是你在第i位的时候匹配成功的次数,那么dp[i]...

2018-04-18 16:52:45 190

原创 HDU - 2203 亲和串 (KMP)

题意:给你两个串,如果串1可以通过循环位移和串2匹配上那么就输出yes,否则输出no。思路:原来以为是最小表示法。。但是明显不能用,因为两个串他的字典序序列不一定是匹配的,那么我们应该怎么办呢?我们把串1拼一下就好了啊。。扩展两倍就把所有情况都给包含进去了代码:#include <bits/stdc++.h>using namespace std;const int maxn = ...

2018-04-18 16:40:23 116

原创 POJ - 2348 Euclid's Game (博弈论)

题意:有两个人S和O,他们面前有两个数字,S先,他们每次能够减去两个数字中较小的那个的整数倍,最后谁先得到0谁就获胜。思路:博弈论,我们在这里总设a是大于b的,那么当a-b<b的时候,其实胜负已经决定了,(因为再减一次我们就能达到有1的情况)大家就只能辗转相减得到答案了,那么我肯定要把这个状态留给我,然后我把 k 1 留给你,之后我有1 0 就赢了,然后就好了#include <std...

2018-04-13 20:37:53 225

原创 POJ - 1201 Intervals

题意:给你一组区间a和b ,你在这里最少选择c个点,问你最少选择多少个点可以满足条件。思路:在刚开始着手这道题的时候是不是一点思路都没有,嗯,在仔细想想你会发现你还是没思路。。。对,正解思路是差分约束,我们先假设dis[i]表示的是从0到i中可以选择的点,那么从区间a到b至少选择c个点转化一下就是dis[b+1] - dis[a] >= c之后我们换一下位置就是 dis[b+1] >=...

2018-04-13 20:07:15 87

原创 51Nod - 1682 中位数计数 (思路)

题意:中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数思路:对于一个数如果他在这样一组区间里,就是说比他大的数等于比他小的数那么我们就可以说这个数是这个区间的中位数,根据这个思路我们可以记录一下当前枚举向左的时候比他大的数字和比他小的数字的差值,如果在我们向右枚...

2018-04-13 19:33:13 215

原创 51Nod - 1534 棋子游戏(xjb博弈)

题意:波雷卡普和瓦西里喜欢简单的逻辑游戏。今天他们玩了一个游戏,这个游戏在一个很大的棋盘上进行,他们每个人有一个棋子。他们轮流移动自己的棋子,波雷卡普先开始。每一步移动中,波雷卡普可以将他的棋子从(x,y) 移动到 (x-1,y) 或者 (x,y-1)。而瓦西里可以将他的棋子从(x,y) 移动到 (x-1,y),(x-1,y-1) 或者 (x,y-1)。当然他们可以选择不移动。还有一些其它的限制,...

2018-04-13 17:54:54 251

原创 51Nod - 1279 扔盘子 (思路模拟)

题意:有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去)。盘子有几种命运:1、掉到井底。2、被卡住。3、落到别的盘子上方。盘子的高度也是单位高度。给定井的宽度和每个盘子的宽度,求最终落到井内的盘子数量。如图井和盘子信息如下:井:5 6 4 3 6 2 3盘子:2 3 5 2 4最终有4个盘子落在井内。...

2018-04-13 17:46:24 151

原创 51Nod - 1091 线段的重叠

题意:X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,10201020和12251225的重叠部分为12201220。给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。思路:首先讲一下我的思路,我们按照x坐标从小到大排序,之后n^2暴力去找最大距离,果断T,之后没时间写了,比赛之后想了一下,其实我们只需要维护最...

2018-04-13 17:37:58 151

原创 51Nod - 1183 编辑距离(dp)

题意:编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k->s)sittin (e->i)sitting (->g)所以kitten和sitting的编辑距离是3...

2018-04-13 17:31:33 145

原创 POJ - 3368 Frequent values (RMQ)

题意:给你n个数,和m个询问(l,r),问你从l到r众数的个数。思路:RMQ,我们首先预处理出所有区间的众数数量,比如样例-1 -1 1 1 1 1 3 10 10 10那么我们预处理的结果就是 1,2,1,2,3,4,1,1,2,3,之后对于我们要查询的区间我们可以分成两个部分,就是在一个完整的众数区间和不在一个完整的众数区间比如说我们查询 的是 4到9,那么我们可以知道从第7位开始时一个完整的...

2018-04-13 17:06:50 147

原创 POJ - 3041 Asteroids (二分图匹配)

题意:给你一个图里面有坐标,你每次可以摧毁一行的所有点,或者摧毁一列的所有点,我们最少需要多少次,让他消灭所有点。思路:这是我写的第一道非模板题的二分图,感叹建图是真的叼~我们把行和列抽出来,之后去连边,比如我们(1,3) (1,1) (2,2)(2,3),那么二分图的行1连列1,行1连列3,行2 连列2 行2 连列3  那么我们现在就得到了一个二分图,之后我们的问题就变成了,最少有多少个点可以使...

2018-04-11 16:03:42 137

原创 POJ - 2110 Mountain Walking (搜索二分枚举区间)

题意:给你一个图,每个点表示的是他的海拔高度,他现在让你从左上角走到右下角,让你找到这样一条路,使这条路中,最小值和最大值的差值最小。思路:首先我们可以枚举这个差值,只要大于这个差值的我们都不走,看看能不能走出来,这样会超时。。。那么我们二分这个差值看看能不能走出来,结果还是超时,因为如果我们走不了的话,就要回溯,回溯的话时间复杂度会退化,怎样能让他不回溯呢,就是我们两个点的区间,如果A到B点不行...

2018-04-11 15:57:20 196

原创 POJ - 1068 Parencodings (思路)

题意: 给你一组括号的序列,他表示的是当前的右括号前面有几个左括号,他现在让你求的是每一个右括号和他匹配的左括号中间有几个左括号思路:就是当前数字减去前一个数字表示的是你现在有几个右括号对吧,也就是说他有a[i]-a[i-1]个括号等待匹配,我们从前往后扫这样一组序列,遇到一个非0的数(a[i])就表示我们现在这里有a[i]个括号等待匹配,遇到了就减去一个表示的是我们当前匹配了一个括号,他走过的距...

2018-04-11 15:49:29 134

原创 POJ - 1573 Robot Motion (水)

题意:给你一个地图,他有方向,你每次只能按照他的方向去走,问你能不能走出迷宫(就是超出边界),如果有环的话,就输出进入环的步数和环的大小思路:没有思路,,,他让你咋办你就咋办呗 。。上代码:#include <stdio.h>#include <algorithm>#include <string.h>#include <vector>#in...

2018-04-11 09:44:28 190

原创 POJ - 1753 Flip Game (状压)

题意: 给你一个4*4的方格,里面有黑棋和白棋,翻一次他的上下左右都有变成他的相反颜色,现在问你最少多少次可以把他全部翻成白色或者黑色。思路:我们知道,一个格子翻多余三次其实就是没有意义的,因为白变黑,黑在变白是多余的操作,那么我们怎样可以得到最少的次数呢?我们每次都翻他的上一行,比如说我们现在在a[i][j],那我如果a[i-1][j] 不是我们想要的颜色的话,我们就翻a[i][j],仔细想想我...

2018-04-11 09:40:05 82

原创 UVA - 624 CD (01背包)

题意: 你现在有一个刻录盘,最多可以刻录N分钟,你有m首歌和他们的时间,问你最多可以刻录多少,并把每首歌的时间给打印出来思路:其实,,,就是-01背包加打印路径吗。。代码:#include <bits/stdc++.h>using namespace std;int a[111111],dp[111111];int vis[1111][1111];int path[1111];...

2018-04-05 17:46:35 118

原创 CodeForces - 954D Fight Against Traffic (最短路)

题意:哇,我这个题翻译了最少1个小时,到死都没翻译出来。。。题意就是:给你n个点和m条边,之后给你一个起点和终点,其中一个点(A)到另一个点(B)的距离定义为A到B经过了多少条路径,现在问你的是,在原图中最多可以加多少条边使得起点到终点的最短路不变。思路:我们明确一下题意,其实就是在第i点和第j点加一条边,使得s点到t点的最短距离不变,其中我们知道i到j的边权是1那么其实就是 dis[起点][i]...

2018-04-05 17:43:59 235

原创 HihoCoder - 1687 寻找切线(几何??)

题意: 就是给你几个点,问你能不能找到两个点的连线,让所有点都在连线的一遍思路:就是找到最左边或者最右边的两个点,之后挑出一个斜率最大或者斜率最小的直线就好了,(我是水过去的,直接按照x轴排序就好了)代码:#include <bits/stdc++.h>using namespace std;struct node{ int x,y,index; bool operator ...

2018-04-05 17:30:12 147

原创 HihoCoder - 1701 挑选子集 (思路)

题意:给你一组序列,让你从这中间选取m个数,使他们的差都是k的倍数的方案数是多少思路:点击打开链接和这道cf的题差不多都是一个思路的,讲一下把,就是 A%k == nB%k == n  可以推出  (A-B) % K ==0  自己写几个式子看看, 其实这个式子我是会证明的,不过这里太小写不下嗯,就是这样,那么方法1:    我们统计余数,余数相同的数量(ans)大于m的我们从中选择m个那就是组合...

2018-04-05 17:25:13 224

原创 HihoCoder - 1700 相似颜色 (水)

题意:中文,但是这个题意哦,自己看了好多遍,感觉自己没有特别看得懂 。。。思路:就是首先给你两个16进制的数字,你要先把他变成10进制的之后套上题目给的公式就好了,其中题目上有给,如果是aabbcc型的话可以简化成abc,那么他让你找的就是两个相同的16进制数。。。上代码把:#include <bits/stdc++.h>using namespace std;int t[1111...

2018-04-05 16:58:52 124

原创 POJ - 3104 Drying (二分)

题意:给你n件刚刚洗完的衣服,他们的含水量是a[i],你现在有一个吹风机,一分钟可以烘干k的水,或者自然风干一分钟烘干1的水,现在问你多长时间可以把他全部烘干完思路:我们二分的就是全部烘干完的时间,假设我们当前枚举的时间是m的话,那么含水量比m小的数我们就可以不考虑了,现在考虑含水量大于m的衣服,他们需要烘干的时间是多少呢?首先这个衣服含水量大于m, 他自然风干的话会减少m所以现在是(a[i] -...

2018-04-05 16:54:06 152

原创 poj 1330 Nearest Common Ancestors (LCA 裸 tarjan)

题意:就是给你n个点,n-1条边的树,只有一组询问,问你(u,v)的最近公共祖先是谁思路:就是一个裸的LCA嘛,LCA现在只会写离线的tarjan,讲一下把,tarjan就是我们先记录下我们需要查询的值,之后跑一遍tarjan,在跑的时候,记录下当前点的父亲节点(并查集维护一下),如果我们的当前点在我们的记录数组中的话,我们就开始查询和当前点(u)有关系的所有节点(v),看看他有没有被访问过,如果...

2018-04-03 09:51:15 114

原创 NYIST 1272 表达式求值 (模拟)

题意:描述假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式。 2. 如果 X 和 Y 是 表达式,则 X+Y, X*Y 也是表达式; *优先级高于+. 3. 如果 X 和 Y 是 表达式,则 函数 Smax(X,Y)也是表达式,其值为:先分别求出 X ,Y 值的各位数字之和,再从中选最大数。 4.如果 X 是 表达式,则 (X)也是表达式。 例如: 表达式 12*(2+3)+Smax...

2018-04-02 21:42:58 167

空空如也

空空如也

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

TA关注的人

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