- 博客(153)
- 收藏
- 关注
原创 bzoj2257: [Jsoi2009]瓶子和燃料
由裴蜀定理,最后结果为所有数最大公因数,所以预处理公因数然后看最大的次数>=k的数。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch
2017-09-22 08:43:35 274
原创 bzoj1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
随便dp。(我是不会告诉你只是为了500题纪念的)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(
2017-09-21 15:00:24 476 2
原创 bzoj3531: [Sdoi2014]旅行
用类似主席树的方法动态开点链剖+线段树,分宗教维护线段树。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getch
2017-09-20 22:05:04 177
原创 带花树算法浅谈&&bzoj4405: [wc2016]挑战NPC
带花树简介带花树用来求解一般图的最大匹配问题。前置技能基础图论知识。 极大匹配:对于一个匹配,若无法在原图中找到任意边加入匹配,则称该匹配为一个极大匹配。 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配 。 交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边 … 形成的路径叫交替路。 增广路:对于一条路径,从一个未匹配点出发,走交替路,终止于另一个未匹配
2017-09-18 10:53:37 605
原创 【模板】FFT
不是我写的。作者见这里:传送门#include <cmath>#include <queue>#include <cstdio>#include <iomanip>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define N 400000#define ll long lon
2017-09-18 10:48:54 416
原创 bzoj2186: [Sdoi2008]沙拉公主的困惑
显然答案等于ϕ(m!)∗(n!/m!) \phi(m!)*(n!/m!) n!很容易求。 ϕ(x)=x∗p1−1p1∗p2−1p2∗... \phi(x)=x*\frac{p_1-1}{p_1}*\frac{p_2-1}{p_2}*... 所以ϕ(m!)m!=p1−1p1∗p2−1p2∗...\frac{\phi(m!)}{m!}=\frac{p_1-1}{p_1}*\frac{p_2-1}
2017-09-14 15:33:30 203
原创 bzoj1293: [SCOI2009]生日礼物
考虑双指针,显然区间中必须有一种颜色一个,所以如果队首的元素在区间中出现过两次以上,就可以将它弹出。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;int read(){ char ch=getchar();int f
2017-09-13 14:16:43 187
原创 在这里写上noip后要填的坑吧
1.树套树 2.CDQ分治 3.半平面交 4.FFT 5.LCT 6.KD-tree 7.后缀自动机 8.数学题…
2017-09-12 21:25:22 316
原创 bzoj2743: [HEOI2012]采花
考虑将询问离线。考虑每种颜色的花对答案的贡献,我们发现,对于一个位置上的花,若左端点在从1到上一个与该位置颜色相同的花的位置上,则该颜色对答案有贡献。所以将所有询问按1右端点从小到大排序,定义pre[i]为与该位置距离最近的与它颜色相同的花。对于一个位置,将pre[pre[i]]+1–pre[i]这段区间+1,然后每次询问的答案就是L上的值了,可以用线段树区间加,单点查询来做。#include<io
2017-09-12 15:39:15 230
原创 bzoj1208: [HNOI2004]宠物收养所
应某人要求把这题放出来QAQ。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,tree[80005][2],root,t1,t2,size,ans,fa[80005],s[80005],x1,x2;int mod=1000000;int r
2017-09-11 20:36:44 56
原创 bzoj2245: [SDOI2011]工作安排
费用流模板,调了半天把ans改成 long long就过了什么鬼… #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;const int inf=0x7f7f7f7f;int read(){
2017-09-11 16:07:51 197
原创 bzoj3781: 小B的询问
莫队,队询问排序,以左端点块为第一关键字,右端点为第二关键字,离线处理。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define ll long longusing namespace std;int read(){ char ch=getchar(
2017-09-11 09:31:01 261
原创 bzoj3527: [Zjoi2014]力
只想贴个模板QAQ。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(
2017-09-11 08:48:51 172
原创 bzoj2819: Nim
链剖维护路径异或值。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(); while(ch>
2017-09-09 21:23:57 216
原创 bzoj2946: [Poi2000]公共串
将所有串连起来,中间加一个分隔符,二分答案,有连续ht>=mid且每个串中都出现一次就合法,否则不合法,一定要将分隔符特判掉,否则=0会输出1。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar()
2017-09-08 18:16:49 255
原创 bzoj3944: Sum
挖坑不填。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define ll long longusing namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(
2017-09-08 15:02:44 215
原创 Codeforces Round #433 (Div. 2) E. Boredom
题目大意问多少个两个点确定的矩形与给定区间有交。题解其实答案就是所有形成的矩形减没有交的矩形,那么由容斥原理,就是给定区间的4边的矩形减4个角,这个可以用主席树之类的维护。#include<map>#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<algori
2017-09-08 08:50:51 250
原创 bzoj3732: Network
求一边最小生成树就能保证两点之间边最小,然后lca搞搞就行了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=get
2017-09-08 08:45:10 229
原创 Codeforces Round #433 (Div. 2) D. Jury Meeting
题目大意所有人要去0号城市,并且只坐飞机,飞机只有去0的和从0出发的,所有人要呆k天,问最小机票花费。题解对去的和返回的飞机分类排序,去的从早到晚,回来的从晚到早,处理每个时间上所有人去0的最小代价(由于排好序,所以选择时选的是时间最小的),从晚到早选返回的,所有人都满足时算一下代价,最后找出代价最小值。#include<iostream>#include<cstdio>#include<cst
2017-09-07 14:28:07 211
原创 Codeforces Round #433 (Div. 2) C. Planning
题目大意飞机延误k分钟,每分钟只能起飞一架,每架飞机每晚一分钟有个代价,求最小代价。题解显然前k分钟代价不可避免,直接加入优先队列,其余的先加入优先队列并取出队首。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;int read
2017-09-07 14:20:05 230
原创 Codeforces Round #433 (Div. 2)B. Maxim Buys an Apartment
题目大意一个有基佬气息的人想让他左或有有邻居,知道邻居数,但不知道位置,求最少和最大能选几个位置。题解显然k=0 ans:0,0 k=n min=0; else min=1; max=max(n-k,2*k)(一个邻居有两个位置)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using na
2017-09-07 14:16:17 194
原创 Codeforces Round #433 (Div. 2)A. Fraction
题目大意求分子分母和为n的最大真分数。(分子分母互质)题解暴力QAQ。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') c
2017-09-07 14:11:56 185
原创 bzoj1821: [JSOI2010]Group 部落划分 Group
最小生成树裸题没看出来QAQ,连通块数小于k就输出。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>using namespace std;int read(){ char ch=getchar();int f=0;
2017-09-05 20:20:36 267
原创 bzoj4720: [Noip2016]换教室
dp裸题,求一遍floyd,dp式 f[i][j][0]=min(f[i−1][j][0]+(double)dis[c[i−1]][c[i]],f[i−1][j][1]+(1.0−k[i−1])∗(double)dis[c[i−1]][c[i]]+k[i−1]∗(double)dis[d[i−1]][c[i]]);f[i][j][0]=min(f[i-1][j][0]+(double)dis[c[
2017-09-05 19:15:34 331
原创 bzoj1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
求后缀数组,二分答案,有超过k个连续height>=mid 就符合。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;int read(){ char ch=getchar();int f=0; while(ch
2017-09-05 14:20:30 222
原创 bzoj1412: [ZJOI2009]狼和羊的故事
裸最小割(模板)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;const int inf=0x7f7f7f7f;int read(){ char ch=getchar();int f=
2017-09-05 10:54:05 270
原创 bzoj1996: [Hnoi2010]chorus 合唱队
区间dp。 f[i][j][1/0]表示[i,j]区间上一个选左或右。 f[i][j][0]=f[i+1][j][0]*(a[i]#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int mod=19650827;int read(){
2017-09-05 09:10:08 277
原创 bzoj2006: [NOI2010]超级钢琴
维护前缀和,用线段树维护距离一个点[L,R]的最大值,并记录左右区间限制,将它加入优先队列,当取出一个点时,加入[L,where-1]和[where+1,R]两个值,记录左右限制。具体细节看代码。(写的不可读QAQ)#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>usi
2017-09-04 14:46:16 246
原创 bzoj2809: [Apio2012]dispatching
练习一下启发式合并,就照着别人写了一遍。(好菜QAQ) 从后往前枚举管理者,贪心选择最便宜的忍者,用splay+启发式合并维护。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=
2017-09-03 21:33:50 181
原创 bzoj4517: [Sdoi2016]排列计数
f[n]=(f[n-1]*f[n-2])(i-1); ans=c(n,m)*f[n-m].#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'
2017-09-03 19:20:21 191
原创 bzoj2406: 矩阵
直接求不好求想到网络流模型,对每行每列算和,二分答案,对每行建点xi,每列建点yi,从s到xi连[sum-mid,sum+mid]边,对每列yi到t连[sum-mid,sum+mid]边,代表行的点和代表列的点连[L,R]的边,跑上下界可行流(注释部分为求方案)。#include<iostream>#include<cstdio>#include<cstring>#include<algori
2017-08-31 11:04:27 314 2
原创 bzoj2405: 数字
打表找规律发现22680时出现循环,然后就随便搞搞。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define ll long longll n,m,a[22681];long long read(){ char ch=getchar();l
2017-08-31 10:58:10 328 1
原创 Codeforces Round #430 (Div. 2) D. Vitya and Strange Lesson
题目大意每次对数组异或一个值,求数组的mex(没在数组出现的最小非负整数)题解对所有数建一棵二进制trie树,记录修改的二进制位,贪心选择,如果修改的状态在原数组中没出现过,则之后的二进制位都可以与答案相同(即结果为0),如果当前节点子树没满,则可以与当前修改状态相同,否则只能与修改相反。(我好弱啊模板题调1小时)#include<iostream>#include<cstdio>#includ
2017-08-30 15:04:13 231 1
原创 Codeforces Round #430 (Div. 2) B. Gleb And Pizza
题目大意有多少圆在外面圆内里面圆外。题解求一下圆心到原点距离,然后加r减r判断即可。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int read(){ char ch=getchar();int f=0;
2017-08-30 14:57:34 219 2
原创 Codeforces Round #430 (Div. 2) A. Kirill And The Game
是否存在,l<=a<=r,a*k==b,x<=b<=y. 暴力模拟,不要企图o(1)算。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'|
2017-08-30 14:54:19 181
原创 bzoj3524: [Poi2014]Couriers&&2223: [Coci 2009]PATULJCI
主席树模板题。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') ch=getchar(); while(ch>='
2017-08-28 21:46:58 291 2
原创 Codeforces Round #428 (Div. 2) E. Mother of Dragons
题目大意n个城堡间有些城堡有墙,将k点能量分给城堡,每个墙的防御值为u*v,求防御值最大是多少。 (n<=40,k<=1000)题解分析一下(猜一下)结论知,平均分给最大团最大。求最大用类似A*的Bron-Kerbosch算法。 证明: #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using
2017-08-28 13:18:13 261
原创 bzoj2989: 数列&&4170: 极光
二维线段树搞搞。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(); while(ch>='
2017-08-25 10:12:41 229
原创 AIM Tech Round 4 (Div. 2) D. Interactive LowerBound
题目大意每个点的next为比它大的下一个数得位置,每次询问位置,告诉你valuei和next,求比x大的最小的数。题解考场上不会搞QAQ,2小时左右yy了个做法,然后疯狂wa on pretest 2,早上读读题才发现要判-1,改了还是wa 3,忽然发现自己输出了位置,gg。#include<iostream>#include<cstdio>#include<cstring>#include<
2017-08-25 08:27:58 695
原创 AIM Tech Round 4 (Div. 2) C. Sorting by Subsequences
题目大意每次选一个子序列,对它们进行排序,每个位置只能选1次,问最多选的次数。题解随便划一划就觉得是置换,然后就觉得很有道理,然后猜结论,然后xjb码一码,然后pp,然后ac。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ c
2017-08-25 08:23:07 421
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人