自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 uva 120 Stacks of Flapjacks 简单构造

点击打开链接如果从大到小进行操作,则当前为第k大,(k-i大的都已经放到正确位置&&flip(k)不影响已经放好的位置)b[k],a中第k大元素找到第k大位置,flip(pos(k)) 此时b[k]在最上方,flip(k) b[k]落到到正确位置 #include #include #include #include #include using namespace st

2016-11-29 21:10:23 290

原创 hdu 5833 Zhu and 772002 高斯消元

点击打开链接题意:给出n个数 要求选出若干个数,求使得乘积为平方数的方法数已知每个数的素因子不超过2e3 最后的乘积可以看作,所有素因子幂次方的乘积 因为乘积为平方数,所以每个素因子的幂都应该mod2=0 素因子的幂由每个数是否选决定 设x为是否选该数,x取(0|1)所以能得到maxp+1个方程,偶数贡献为0,每个变量系数取0,1 mod2=0等价于xor=0方程 

2016-11-29 13:40:55 238

原创 codeforces 735C Tennis Championship 思维+递推

点击打开链接题意:两个人能比赛要求胜场差转换一下思维 令f[x]为冠军赢x场比赛时最少的参赛人数,则f[x]=f[x-1]+f[x-2] (让赢x-1场的去赢x-2场的) 输入n 二分找到n>=f[x]的最大x即可 #include #include #include #include typedef long long ll;using namespace std;

2016-11-28 12:53:41 708

原创 codeforces 735D Taxes 哥德巴赫猜想

点击打开链接n不是素数时 &&拆分时不是素数 n是偶数&&n>2 则答案(n的最大因子)>=2 n是奇数,答案(最大因子)>=3若拆分成素数 哥德巴赫猜想 :大于2的偶数能拆分成两个质数之和 所以答案最小能取到2n为奇数时,n-3为偶数(n-3能拆成两个素数之和,3为素数) 所以奇数的答案奇数能否为两个素数之和?  因为n为奇数所以拆分的两个素数k,n-k一个为奇数一个

2016-11-28 12:14:11 448

原创 poj 3734 Blocks 递推+矩阵幂优化

点击打开链接题意 n块block 可以涂上 R,B,G,Y 求n块涂色中 R,G颜色个数为偶数的方法数?涂到第i块时:设ai RG都为偶数的方案数. bi RG恰好一个为偶数的方案数. ci:RG都为奇数的方案数容易得到递推关系为 a[i+1]=2ai+bi    b[i+1]=2ai+2bi+2ci   c[i+1]=bi+2ci发现n(a[i+1],b[i+1],c[i+1

2016-11-28 00:05:55 330

原创 hdu 2586 How far away LCA在线RMQ(模板题)

点击打开链接求dist(u,v) 用最短路flold显然超时 由于是树,则可以O(n)求出w=LCA(u,v)dist(u,v)=d(u)+d(v)-2*d(w); d(i)为根到结点i的距离 计算w=LCA(u,v) w为u->v路径中深度最小的点 则先用dfs记录u->v路径的遍历顺序,然后RMQ求出该路径中(pos[u]~pos[v])中dep最小的编号x 返回vs[x]即可

2016-11-26 21:49:43 370

原创 hdu 5933 ArcSoft's Office Rearrangement 思维

点击打开链接题意:给你n个数,你有两个操作:1.将相邻两个数合并 2.将一个数拆分成两个数将这n个数变成k个数,要求操作数最小。最朴素的做法是:先把n块合成一块 然后在把一个大块平均分出k块 总共为n-1+k-1步如果前缀和pre[x],pre[y]已经是x的倍数 此时若把pre[x],pre[y]-pre[x-1]合并成一块,则最后也是要分

2016-11-26 15:03:00 363

原创 poj 3233 Matrix Power Series 矩阵构造+快速幂

点击打开链接要求A+A2+...+Ak,而不是单个矩阵的幂即求A(E+A+..A^k-1) 可以不断乘以K次A那么我们可以构造一个分块的辅助矩阵 S,其中 A 为原矩阵,E 为单位矩阵,O 为0矩阵即 S=[A,E]   容易用归纳得到S^k=[A^k,A^k-1+A^k-2+...A+E] [0 ,E][0,E]#include #include

2016-11-24 15:30:54 333

原创 蓝桥杯 波动数列 DP背包

点击打开链接x为首项p=a||p=-bx+(x+p)+(x+2p)+...(x+(n-1)p)=snx=s-(p+2p+..(n-1)p)a,b的个数和为 (1+(n-1))*(n-1)/2= n*(n-1)/2此时枚举a,就能确定b得到nx=s-ca+(n*(n-1))/2-c)*b若t等于s-ca+(n*(n-1))/2-c)*b&&t%n==0  则首项确定 但是

2016-11-24 11:38:24 861

原创 codeforces 740C mex 构造

点击打开链接ans由最短的区间长度决定.最小的区间长度为d,为了使最小不被包含的最大 则应该取0~d-1 现在构造在m个连续区间中 任意取一个区间都至少要包含0~d-1 构造a1开始为0~d-1,0~d-1一直赋值到数组结束则现在任取一段l>=d的连续区间,设开头为k则 区间为(k~d-1,0~k-1..)肯定包含0~d-1这些数字 #include #inc

2016-11-24 03:12:55 488

原创 poj 1082 Calendar Game 博弈递推

点击打开链接参考点击打开链接如果抽到最后一天肯定是必败的,那就用这个必败态往前面递推。状态按照日期先后排列,每个current状态取决于两个next状态。只要两个next状态中有一个为必败态,则Adam可以选择移动到该next状态,让Eve落败;否则Adam没有选择,只能移动到成功态,将胜利的果实拱手让给Eve。#include #include #include #incl

2016-11-23 11:06:36 294

原创 poj 3070 Fibonacci 矩阵快速幂

点击打开链接题意求:F[n]%mod n由矩阵乘法得到F[i]第n项为矩阵[[1,1] [1,0]]的n次幂的a[1][2]项,利用快速求出矩阵即可得到F[n]#include #include #include #include #include using namespace std;typedef long long ll;const int mod=1e4;

2016-11-22 18:37:05 238

原创 poj 1733 Parity game 离散化+带权并查集(区间)

点击打开链接奇数个1 为奇,偶数个1为偶rk[i] :区间 [根节点,i]的奇偶性题意:要判断区间[l,r]的奇偶性是否为k,如果l-1,和r在同一集合中 则要满足rk[l-1]^k==rk[r] 如果不在同一个集合,把小fx的当作根节点 求rk[fy] 画图求即可#include #include #include #include #include using

2016-11-22 16:10:01 359

原创 codeforces 738C Road to Cinema 贪心+二分

点击打开链接vi>vj 若使用vj能通过 vi也能通过 二分找到最小的vj 然后再j~n中选出c最小的即可 #include #include #include #include #include using namespace std;const int N=2e5+20;typedef long long ll;ll s,T;// int n,k;int p[N

2016-11-21 20:36:13 570

原创 codeforces 738D Sea Battle 思维+构造

点击打开链接题意:要每块长度为b 总共a块中, 现在射入k个1都没射中 问最少插入多少个1能使得至少命中一块现在插入ans个1 使得连续b个0的个数即块数(不相交)最多为a-1 这样肯定能命中一个(反证)#include #include #include #include using namespace std;const int N=2e5+20;int n,a,b

2016-11-21 19:37:28 552

原创 poj 1704 Georgia and Bob阶梯博弈

点击打开链接把棋子两两组成一对,其距离看作nim中石子的数量右边的棋子向左移动  距离减小 相当于在该堆中拿石子 左边的棋子向左移动 距离增加 石子增多,但是下一步可以移动其右边的棋子,使之恢复至原来的状态 #include #include #include #include #include #include #include using namespac

2016-11-20 11:29:05 406

原创 poj 2348 Euclid's Game 博弈(推理)

点击打开链接题意给a,b 每次操作可以使大的数(假设是b)减小a的若干倍即b-ax&&b-ax>=0 Stan先手谁先使得一个数为0谁就获胜 若a|b则 b-ka=0 Stan获胜分两种情况 b-aa若b-a若b-a>a 则b可以减去a的若干倍 设x为:b-ax若(a,b-(x-1)a)为必胜态 则(a,b)为必败态 此时因为(a,b-(x-1)a)的下

2016-11-19 18:46:01 357

原创 poj 2484 A Funny Game 博弈(对称)

点击打开链接#include #include #include #include #include #include #include using namespace std;typedef long long ll;const int N=1e2+20;int main(){ int n; while(cin>>n&&n) { //n个coin排成环 每次可

2016-11-19 17:59:31 348

原创 Codeforces 734E 树的直径+缩点

点击打开链接/颜色相同的联通块能同时变色,则缩成一个点//缩点后 变成一个黑白相间的树 //选中心点变色使得同色的一圈向外扩散 最多扩散(d+1)/2次 d为树的直径 #include #include #include #include #include #include using namespace std;typedef long long ll;c

2016-11-19 11:17:43 416

原创 (a,b)=1 ax+by x>0 y>0的最大不能表示数

不能表示为 形如 x*a+y*b x>=0 ,y>=0 的最大的整数是 a*b-a-b 只用考虑a>1,b>1 的情形证明: 1 首先证明,关于x,y的不定方程: x*a+y*b=a*b-a-b 无非负整数解反设这个方程有解,变形一下,x*a+(y+1)*b=a*b-a ,则推出a|(y+1)*b (|是整除符号),那么由于(a,b)=1 ,推出, a|y+1 ,由于y+1!=

2016-11-17 21:41:20 1578

原创 uva 1649 Binomial coefficients 枚举+二分

点击打开链接#include #include #include #include #include #include #define M(a,b) make_pair(a,b)#define pll pairusing namespace std;typedef long long ll;const int N=1e3+20;ll m;priority_queue,

2016-11-16 13:59:11 465

原创 Codeforces 734D Anton and Chess 几何+模拟

点击打开链接最后In Check的棋子来自king 8个方向中的最近的棋子 保留该棋子 最后在判断下即可 #include #include #include #include #include #include using namespace std;typedef long long ll;const int N=5e5+20;struct point{ cha

2016-11-16 10:22:53 607

原创 Codeforce 734C Anton and Making Potions 枚举+二分

点击打开链接#include #include #include #include #include #include using namespace std;typedef long long ll;const int N=1e5+20;const ll inf=1e18;ll a[N],b[N],c[N],d[N];int main(){ ll n,x,s; l

2016-11-16 08:46:53 487

原创 uva 1648 Business Center 数学+二分

点击打开链接 pu+q(-d)=ans>1&&ans尽量小  //D=gcd(u,d) D|ans 则枚举ans,logn 判断ans是否满p+q=n ,pu+q(-d)=ans//二分求出p即可 总的时间复杂度O(mlog(n)log(n))#include #include #include using namespace std;typedef long long

2016-11-14 19:17:01 438

原创 uva 10837 A Research problem 欧拉函数+暴力

点击打开链接m=phi(n)=p1^a1-1(p1-1).....pn^an-1(pn-1)n中的所有素因子p必须满足m%(p-1)==0这一条件。因此可以事先将所有这样的素数找出来,然后在这些素数的基础上进行暴力搜索#include #include #include #include #include #include using namespace std;co

2016-11-13 22:52:21 398

原创 uva 1647 高精度+递推

点击打开链接#include #include #include #include #include using namespace std;const int N=1e3;int a[N+20][150],b[N+20][150]; //a[i] i次变化后1的个数 ,b[i] i步操作后00的个数// 0->10 1->01 初始为1,求i步后00的个数//1->01-

2016-11-13 11:09:17 560

原创 acdream 1025 Transform 简单dp

点击打开链接//就是计算从a转换到b的最少步数,a可以转化到a+x,x是a的因子。b/ 只要x>a 就一定能转换成b 1为任何数因子 //dp[i] a->i的最少步数 #include #include #include #include #include using namespace std;const int inf=1e7+20;const

2016-11-12 20:11:16 253

原创 UVA 156 Ananagrams map应用

点击打开链接#include #include #include #include #include using namespace std;const int N=1e5+20;string fun(string s){ int l=s.length(); for(int i=0;i<l;i++) { s[i]=tolower(s[i]); } sort(s.b

2016-11-12 19:25:30 282

原创 uva 10815 Andy's Dictionary set(统计文章中单词数)

点击打开链接#include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;const ll mod=1e8+7;const int N=2e5+20;set dict;int main

2016-11-09 14:34:39 272

原创 Codeforces 631C Report排序+思维

点击打开链接//题意:n,k//容易看出 若i//所以最后剩下的操作为 irj//r[i]为递减,r[i]操作后a的r[i+1]+1~r[i]这段不会在改变 为了找到r[i+1]~r[i]这段将b从小到大排序 t=1 递增时 a中r[i+1]+1~r[i]为b的后几位t=0 递减时 a中的r[i+1]+1~r[i]为b的前几位#include #i

2016-11-08 21:25:14 364

原创 uva 11105 Semi-Prime H-number 筛法

点击打开链接#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e6+1;const ll inf=1<<30;vector h;int vis[N];ll pri[N];int main(){ int n;

2016-11-08 15:56:17 279

原创 codeforces 631B Print Check模拟

点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=5e3+40;const ll inf=1<<30;int g[N][N];int r[N],c[N];// row[i]的颜色int op1[N],op2[N]; int main(){ int n

2016-11-08 14:50:09 302

原创 uva 12063 Zeros and Ones dp记忆化

点击打开链接求n位二进制数 0和1个数相等&&能被k整除&&无前导0 dp[zero][one][r] 0,1个数和余数  从1开始向末尾添加0或1即可// x%k=r// r,x同余k/添加0:2*r,2x同余k //新的余数为(2*r)%k,添加1同理 #include #include #include using namespace std;ty

2016-11-08 12:36:09 365

原创 UVA 11440 Help Tomisu 数论+欧拉函数

点击打开链接//求2~n!中x所有素因子都大于m的x个数//m!=1*2..*m  若x的素因子都大于m 则gcd(x,m!)=1 (把x,m!分别用素因子乘积表示) //即求2~n!中与m!互质的x的个数 若x>m! gcd(x,m!)=gcd(m!,x%m!)//则只要求出小于m!&&与m!互质的个数(一个剩余系)在乘上n!/m!即可 //p[m]=phi[m!]=

2016-11-07 12:33:03 474

原创 uva 557 Buger 概率

点击打开链接题意Ben和Bill是一对双胞胎,生日那天他们请了2n个朋友(包括他们自己,题目给出的即为2n),然后有n个汉堡和n个三明治,然后由Ben的左边开始分食物,每个人选取食物的方式是先丢硬币,正面汉堡,反面是三明治,问最后双胞胎兄弟那道同一种食物的概率。直接算的话 coin还要分在什么时候停下晕了 ..算对立事件 最后两个人拿不一样的buger,即最后剩下两个不同的buger,

2016-11-06 20:51:35 342

原创 Codeforces 629C Famil Door and Brackets(dp)

点击打开链接给定长度为m的序列s,求一共有多少对p,q,使得p+s+q长度为n,且’(‘数与’)’数相等;括号序列合法p+s+q中的任意前缀和>0 即左括号个数任意时刻都不小于右括号个数枚举p的长度和平衡度,q也就固定了 令dp[i][j]为长度i 平衡度为J(左括号比右括号多J)的方法数 dp[i][j]=dp[i][-j] 左括号换成右括号即可 #inc

2016-11-06 19:39:20 379

原创 Codeforces 629D Babaei and Birthday Cake LIS+线段树优化

点击打开链接dp[i]以i结尾的LIS dp[i]=si+max(d[j]) jn令线段1~n代表面积第几小,线段树中保存dp最值,按下标顺序插入即可 #include #include #include #include #include using namespace std;typedef long long ll;const int N=1e5+40;

2016-11-06 10:45:58 394

原创 uva 1363 公式求和(优化)

点击打开链接//计算 累加k%i (i:1~n)//n,k//若k/i=p &&k/(i+1)=p//则k%(i+1)=k-(i+1)*p=k-ip-p=k%i-p//即商的整数部分相同的i~j的余数呈等差数列 #include #include using namespace std;const int N=1e3+20;typedef long long

2016-11-05 20:22:05 357

原创 玲珑oj 1050 Array 简单dp

点击打开链接//dp[i]表示以2^i结尾的子序列个数//枚举a[k]做为2^i结尾的情况即可 #include #include using namespace std;const int N=1e5+20;typedef long long ll;const ll mod=1e9+7;int a[N];int dp[35];//dp[i]表示以2^i结尾的子序列个

2016-11-05 18:53:46 294

原创 uva 129 Kryptopn Factor 暴力回溯

点击打开链接cur之前无相同相邻子串,path[cur]加入后,只需判断后缀cur是否存在相邻重复子串即可#include #include #include #include using namespace std;const int N=1e4+20;char path[N];int cnt;int n,l;bool check(int cur){

2016-11-05 10:24:28 275

空空如也

空空如也

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

TA关注的人

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