自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 uva11892 ENimEN

题意: n堆石子,两人轮流取,每次取一堆,取非0个,但是如果对手没有把这堆取完,那么还要在这堆取。分析: 一下为先手面临的状态: 1堆1个的石子,胜 1堆1个的石子+X堆>1的石子,胜 (每次把非1的堆取到剩1个,留给对手取) 2堆1个的石子,负 2堆1个的石子+1堆>1的石子,胜 (一次取完非1的堆,让对手面临负态) 2堆1个的石子+2堆>1的石子,胜 (把非1的堆取到

2018-01-25 16:51:50 245

原创 博弈论

一、SG函数若一个局面S,做一步操作能够到达局面Xi 则一个局面S的SG函数值SG(S),为除所有SG(Xi) 以外的最小非负整数那么最经典的NIM游戏中,n堆石子,可拆分为n个子博弈,总的SG函数值为所有博弈SG值的异或和;考虑一个堆中石子数为x,则下一步能到0,1,2,…x-1,所以每一个x的SG值就是它本身;因此经典NIM游戏的SG函数值就是所有堆石子的异或和求SG函数值模板:

2018-01-25 16:08:01 322

原创 POJ2187 Beauty Contest

题目: http://poj.org/problem?id=2187分析: 正解应该是旋转卡壳算法,但是目前不会= - 注意到坐标范围是 -1e4 ~ 1e4; 凸包上点最多的时候是近似于一个圆,最大圆半径为 r->1e4 那么圆的周长大约为 2*π*r ≈ 6.28*1e4 又因为坐标都是整数点坐标,所以点数大概在1e4以内; O(n^2)暴力可做;代码:#inc

2018-01-25 15:02:03 159

原创 POJ1228 Grandpa's Estate

题目: http://poj.org/problem?id=1228题意: 给一堆点,是原凸包边上的点或内部的点(内部的点表明凸包被切割); 问能这些点能否唯一确定原来这个凸包分析: 这是一个稳定凸包问题; 如果凸包上一条边唯一确定,那么这条边上至少要有3个点 所以,先跑一遍凸包,然后检查是否每条边至少有3个点; 用向量平行检查 ( 向量叉乘=0则三点共线 )代码:

2018-01-25 14:34:51 253

原创 POJ2932 Coneology

题目: http://poj.org/problem?id=2932 《挑战程序设计竞赛》P258题意: xy平面内给一堆圆,不相交,可以内含; 问所有不被包含的圆是哪些;分析: 计算几何扫描线例题 将圆左右端点的x坐标及圆序号封装到结构体中,以x坐标排序; 按x从小到大扫描; 开一个set:outers记录目前所有最外层的圆; 扫描到圆的左端点,如果不被任何圆包含,则加

2018-01-25 14:24:11 221

原创 POJ2318 TOYS

题目 http://poj.org/problem?id=2318分析: 判断某个玩具在第几个盒子中; 设置一个特殊点O,为整个盒子的左下角点; 对于某个玩具,从n~1依次判断每个隔板,看玩具点是否和O点处于隔板两侧; 第一个使得其处于两侧的隔板,就是此玩具所处的位置;代码:#include #include #include #include using nam

2018-01-25 11:43:00 182

原创 POJ1227 Jack Straws

题目: http://poj.org/problem?id=1127分析: 计算几何,判断两个草丛是否相交; 然后用并查集将相交的草丛合并在一起;代码:#include #include #include #include using namespace std;const int Tmax=10005;const double eps=1e-8;int sgn

2018-01-25 11:38:29 200

原创 计算几何

计算几何模板 持续整理ing…const double eps=1e-8;int sgn(double x){ if(x>eps) return 1; if(xreturn -1; return 0;}inline double add(double a,double b){ if(abs(a+b)abs(a)+abs(b))) return 0;

2018-01-25 11:35:08 300

原创 HDU3518 Boring counting

题目: http://acm.hdu.edu.cn/showproblem.php?pid=3518 分析: KMP O(n^3)会超时; 用后缀数组解; 在字符串末尾添加一个‘#’,代表无限小字符(ASCII值小于‘a’); 得到height数组后; 枚举子串的长度lenth; 若有一段连续height值>=lenth,记录这段子串的出现位置的最左start1和最右start2;

2018-01-25 11:07:38 220

原创 Codeforces#458 C.Travelling Salesman and Special Numbers

题目: http://codeforces.com/contest/914/problem/C 分析: 一次操作后,必定变为1000以内的数; 则先暴力处理出1000以内的合法数; 然后递推出组合数; 就能算啦; 注意k=1的时候,答案是 长度-1 代码:#include using namespace std;const int Tmax=1005;const lo

2018-01-24 20:54:22 389

原创 POJ2774 Long Long Message

题目: http://poj.org/problem?id=2774 分析: 求最长公共子串 用一个#将两个串连接,构造后缀数组 在高度数组中求满足条件的最大值 条件时:两个子串在不同串中 代码:#include #include #include #include using namespace std;const int Tmax=1e5+5;int n,p,

2018-01-24 16:14:59 145

原创 UVALive 4513 Stammering Aliens

题意: 给定一个数m,一个字符串s,求s中至少出现m次的最长子串长度,并输出位置最靠后的对应子串的下标;串长度分析: 构造后缀数组; 先二分答案mid,然后检查高度数组(LCP)中是否有连续的mid个数大于m; 有则L=mid,没有则R=mid-1; 复杂度O(n*(logn)^2+nlogn)代码:#include #include #include #inclu

2018-01-24 15:03:10 226

原创 Codevs 3160 最长公共子串

题目: http://codevs.cn/problem/3160/ 分析: 若n在10000以内,可以O(n^2) dp; 即:f[i][j]= f[i-1][j-1] +1 , s[i]==t[j]     = 0 , s[i]!=t[j] 这里是最长公共子串,要注意跟子序列区分开, 子序列在s[i] != t[j]时是f[i][j] =

2018-01-20 16:28:25 234

原创 POJ3581 Sequence

题目: http://poj.org/problem?id=3581 题意: 给定一个数列,分成三段,每段分别反转,求能得到的字典序最小的序列是什么,要求每段非空。 分析: 第一段容易求得,就是把原序列反转后,求一遍后缀数组,取字典序最小的并且满足三段非空的那段序列。 第二三段,是把原序列除去第一段后反转,再复制成双倍长度,求后缀数组,取字典序最小且满足此两段非空的序列。 注意:

2018-01-20 15:19:41 241

原创 后缀数组

算法: 一个字符串S,长度为n; 有一个数k,k倍增(2的次方,次方++),k=1->2->4...; 后缀数组sa[i]表示:(长度为k的)第i大的子串的起始位置(指针); 数组rank[i]表示以s[i]开头的(长度为k的)后缀在所有排好序的(长度为k的)后缀中是第几小的; 因此,sa与rank是互逆操作; rank表示你排第几 sa表

2018-01-19 21:48:37 184

原创 Codeforces 908D New Year and Arbitrary Arrangement

题目: http://codeforces.com/problemset/problem/908/D题意:给定字符’a’出现的概率pa/(pa+pb),’b’出现的概率pb/(pa+pb); 给定一个正整数k,构造一个字符串,当出现至少k个子序列”ab”时停止构造; 问子序列”ab”出现次数的期望P/Q,输出P*(Q的逆元); 注意是子序列不是子串ab。分析:这个题特别难想! 一个 (dp

2018-01-01 22:00:15 659 2

原创 求逆元的几种方法

给定一a,逆元是指使a*x=1 (mod p)成立的x 一、扩展欧几里得 O ( logn ) 在前面的博客中已经提过了 http://blog.csdn.net/jerry99s/article/details/78169178 a*x=1 (mod p) a*x=p*(-y)+1 a*x+p*y=1; 扩展欧几里得求x 二、快速幂 O ( logn ) 费马小定理说:若p是

2018-01-01 19:53:48 5868

空空如也

空空如也

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

TA关注的人

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