自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2010-2011 OpenCup IX Onsite, II Yandex Summer School Problem A. Automorphism 树哈希

留模板:#include <bits/stdc++.h>using namespace std;typedef unsigned long long ull;typedef pair<ull,ull> pll;const int maxn=1000005;const long long mod=1e9+7;int n,sz[maxn],tot,f[maxn],r...

2018-05-19 17:21:59 281

原创 neerc 2010 codeforces gym 101409 B. Brothers MR32模板

这题只需要分段打表,段内再暴力判断一下就好啦,主要在于挂个板子,在打表的时候由于题目要求的素数数量级大概在1e7左右,所以当MR32发现有的时候,再暴力判断一下,防止MR32误判。半小时能出结果。#include <bits/stdc++.h>using namespace std;const int num[10001]={0,22201,39989,56533,72054,87...

2018-05-11 18:11:24 707

原创 Codeforces Round #472 E. Wardrobe 至少有一个物品没用的01背包

题意:给一堆的盒子,需要叠高高,有些盒子视为有用,有些盒子视为没用,有用的盒子如果底座放在高度为[L, R]的区间里,会增加1的贡献,要输出在所有叠高高的方式中,可能的贡献最大值。解法:可以先处理一个类似的问题:将题目中“底面在区间内”改为“整个盒子在区间内”怎么做呢?1. 先01背包出没用的盒子所可能叠高高的高度。2. 对于有用的怎么办呢?当然是枚举[L, R]区间里能被叠到的高度,看现在所有的...

2018-03-26 02:09:07 561

原创 CCF CSP 201703-5 引水入城 (100分)

DP 复杂度是O(N^2)的。最后一组数据T掉了,改天再改改吧。UPD:过了最后一组,开了编译器优化,并且将数组的两个维度换了一下,利用了局部防存。// 90 points#pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #...

2018-03-20 02:18:23 1454 1

原创 [AtCoder ARC076 .F] [二分图] [霍尔定理] Exhausted?

题意:地上1到m个位置摆上椅子,有n个人要就座,每个人都有座位癖好:选择位置小于等于L或者大于等于R的位置。问至少需要添加多少个椅子能让所有人坐满。解法:显然将一个人和他能坐的所有椅子连边,形成一个二分图,若椅子不够,即使存在完美匹配,也不能使所有人就坐,故椅子数至少要为n,答案初始化 max(0,n-m)。当椅子数大于等于人数时,存在完美匹配代表每个人都能就座,由霍尔定理,要存在完美匹配

2017-11-12 22:35:37 779

原创 hdu 5582 Journey of Taku

题解参考:点击打开链接首先如果Taku使用了第二种魔法,那么有K步的移动是可以确定的,于是我们记录每条边走完后, 通过第一种魔法下一步是哪条边,这样可以倍增算出K步后在哪儿,于是可以直接建图,求最短路即可。重要的话一定要加粗说!**答案会爆int,另外题意有毒!**倍增的是边:#include using namespace std;typedef pair pli;co

2017-11-11 03:22:35 459

原创 codeforces 100959B Airports 曼哈顿距离最大生成树

写了两种做法。1. 对于每个点,向八个象限建最长边,注意最长边没有最短边的对称性,故每个点不能只枚举4个方向,要8个方向都枚举。这个做法速度较快,用的树状数组:#include using namespace std;typedef pair pii;const int maxn=100005;const int inf=2e9+1;int n,pos[maxn],f[maxn]

2017-10-02 18:56:58 780

原创 BZOJ 2177 最小曼哈顿生成树

留板。#include using namespace std;typedef pair pii;const int maxn=100005;const long long inf=0x3f3f3f3f3f3f3f3f;int n,pos[maxn],f[maxn];long long bit[maxn],res,x,y;struct edge { int u,v;

2017-10-02 16:42:09 345

原创 Atcoder Regular Contest 080 CDEF

C - 4-adjacent轻量级分类讨论#include using namespace std;int n,cnt1,cnt2,cnt4,x;int main(){ scanf("%d",&n); while (n--) { scanf("%d",&x); if (x%2!=0) ++cnt1;

2017-08-16 13:56:40 211

原创 2017"百度之星"程序设计大赛 - 初赛(A)

1001 p-1的因子个数。#include using namespace std;int T,P;int check(int x) { int ret=0; for (int i=1;i*i<=x;++i) { if (x%i==0) { ++ret; if (x/i!=i)

2017-08-16 13:38:31 500 1

原创 codeforces 838D D. Airplane Arrangements 构造法 推公式

题意:航空公司卖机票。飞机座位是1~n的,卖m张票,m小于等于n,每张票上有三个信息,票号 i,座位号 j,登机入口 k,登机入口指的是从机头进入或者是从机尾进入。乘客登飞机规则:1. 乘客按照机票的编号从小到大依次登机。2. 乘客登飞机时,从票上指定的入口进入,径直走到自己的位置处,如果有人,就看下一个位置有没有人,直到找到第一个空座位,便入座,如果一直走到头都没有位置,该乘客就会暴

2017-08-09 21:11:11 669 1

原创 Codeforces 838E E. Convex Countour DP

题意:给一个凸包,保证任意三点不共线(这个条件好像没什么用)。让在凸包上求一条最长路,要求不能经过重复的点,且路径不能自交。点与点的距离按欧氏距离算。点数为2500数量级,输入的点按顺时针顺序排好(就是不用求凸包了)。解法:比赛的时候马上莽了一发贪心,枚举起点和两个起始方向,折线地走到终点,交了结果 wa 2,dp只想到了n^3的,于是就去弄第二题线段树了。正解:易知该路径经过

2017-08-09 17:57:47 421

原创 F. Madness Codeforces 822F 贪心 构造

解法:其实也算不上什么构造,将每条边看成每条路径就是最优的情况,每个点的秒表最大时间都是deg_i/2,deg_i为该点的度,这样一来答案就是唯一的,字典序什么的都是唬人的。难点在于如何把放起始点的代码写得简洁,dfs一遍,维护方向和离该点的距离即可。#include using namespace std;const int maxn=105;const double eps=

2017-08-08 11:32:18 357

原创 Codeforces Round #422 (Div. 2) E. Liar 贪心 dp 后缀数组

给两个串,a与b,长度1e5,最多可以在a中选出x段互不相交的连续子串,问能不能拼成b,x的范围最多为30。解法:可以想到dp,dp[i][j]表示a串前j个字符取 i 段,能匹配到b串的最大前缀。这个状态是通过贪心构造的。转移的时候也是贪心转移,分为多一段和不要这个字符两种情况。a) 多一段:dp[i+1][j+lcp(a[j],b[dp[i][j]])]=max(dp[i+1]

2017-08-05 01:41:09 587

原创 UOJ #35. BZOJ 1031 后缀排序 后缀数组模板

真-模板题系列。板子直接用了sort,O(n*logn*logn)的,将就着T吧。#include using namespace std;const int maxn=100005;string s;int n,K,Rank[maxn],tmp[maxn],sa[maxn],lcp[maxn];inline bool compare_sa(int i,int j) { if

2017-08-05 00:04:29 313

原创 HDU 6065 RXD, tree and sequence DP 减少转移情况

给一颗有根树,根节点为1,再给定一个排列,长度为n,要求将排列切分成K段,定义每段的价值为该排列所有点及两两点之间lca中最浅节点的深度。要求输出K段区间所有可能的价值和中的最小值。n*K解法:很明显可以往dp方向思考。定义dp[i][j]为前i位切分成j段的价值和的最小值。在列出转移方程前,先说明观察到的若干性质:性质1. 定义“一段排列所有点及两两点之间lca中最浅节点的深度”为T

2017-08-03 01:56:17 906 1

原创 HDU 6059 Kanade's trio 字典树

给n个数,要求(i,j,k)的对数,满足ai xor aj 解法:还是欠缺了一些 counting 的姿势啊,比赛的时候想错了,写了个假算法。T有20组,n的范围是5e5,考虑O(n)或者O(nlog x)形式的算法。发现,通过字典树,可以枚举j,对每个j,用O(log MAX_INT)的时间复杂度求出i与k的对数。如何求i与k的对数呢?可以从高到低枚举 aj 的每一位。如果该位为1,

2017-08-02 15:24:36 1034 2

原创 HDU 6046 hash 哈希

用随机生成函数生成一个1e6的0/1矩阵,给定一个1e3的0/1矩阵,要求输出该矩阵在原矩阵中的位置。题目保证小矩阵一定是大矩阵的一部分。解法:这题很显然是让我们思考如何在时限内配到该矩阵。一个常用的思路是处理小矩阵每个(x, y)位置的键值,全部放到哈希表中(代码里用的是 1*64 的二进制数存每个键值)。这种方法在DNA序列匹配中经常用到,即k-mer。这样,1e6的大矩阵中,只需要匹配大

2017-08-02 01:56:45 497

原创 H. Zé Coquinho, the sculptor 计数 括号题 2010 USP Try-outs

题意:输入n,K,求第K大的非法括号序列,若没有第K大,输出-1。题目保证运算的数据都在long long范围内。解法:1. 如果n为奇数,那么所有的序列都是非法的,令右括号为二进制1,左括号为二进制0,从高位往低位决定每一位是左括号还是右括号。其实输出的就是K的二进制表示。2. 如果n为偶数,同上一题,还是从高位往低位决定前缀是什么,从而确定每一位是左括号还是右括号,只是这次在求一个

2017-08-02 00:24:57 520

原创 2017 Multi-University Training Contest - Team 3 1008 RXD and math

题意:给定一个公式,给出上限的两个参数n,k,上限为n^k,问公式的答案。解法:答案就是n^k啦。为什么呢?因为,对于每一个大于零的自然数x,一定可以将它分解成唯一的a^2*b的形式,其中u(b)!=0,即u(b)^2=1,函数u为莫比乌斯函数。公式中根号项表示的是,对于一个特定的i,满足a^2于是上代码:#include using namespace std;int c

2017-08-01 20:57:14 256

原创 Codeforces 835E E. The penguin's game 交互题 多猪试毒

给定n(2解法:题目给出的19次询问次数上限是严格的。即能构造数据使得不得不询问19次才能出答案。先讨论出询问的集合元素个数的奇偶性和y个数的奇偶性返回的答案分别是什么。一共有四种情况,用(集合个数,y的个数,答案)表示的话,即有:(偶数,偶数,0),(偶数,奇数,x xor y),(奇数,偶数,x),(奇数,奇数,y),因为x与y非零且互不相等,故0,x,y,x xor y互不相等。

2017-08-01 20:20:35 1149

原创 HDU 6049 Sdjpx Is Happy 贪心 区间DP 从简单的情况着手思考

题意:给定一个全排列,玩家可以将其分成若干块,并对每一块排序,且可以进行一次块交换。问玩家最多可以将原排列分成几个块,使得对原排列进行合法操作后能够生成1~N的顺序排列。比赛的时候没有开这道题,赛后补题的时候发现没有遇到过这种题型,仔细琢磨之后,把问题分解了一步一步想,还是不难的。首先我们不考虑交换操作,这显然是一个贪心问题。从左往右扫,一旦能切开,就切开。我们将切完之后的

2017-07-30 20:21:35 545 1

原创 HDU 6048 Puzzle 逆序对 计数 发现基本操作

8数码问题的扩展,给定一个n*m的局面,问是否有解。局面按题目规则生成。将此问题称作扩展8数码问题的话,通过观察基本操作可以发现,对于x,在只影响x右下角格子的前提下,我们一定可以移到指定的位置。这样我们可以依次将1,2,3,...等格子归位。只剩下右下角四个格子的顺序不定。严格的说,是(n,m-1)与(n-1,m)的格子不能确定是否恰好在其位置上。枚举最简单的2*2情况可以发现,将数

2017-07-29 23:15:45 327

原创 HDU 5955 Guessing the Dice Roll AC自动机 高斯消元

这题把AC自动机模板和高斯消元的经典题拼在了一起。AC自动机请转HDU 2222。高斯消元原型题请参考《挑战程序设计竞赛》第二版 288 页的 Random Walk。有了这两题的基础之后,这一题只是把 Random Walk 题中的网格图转到了AC自动机的状态表里。我们先将每个人的猜测序列建成AC自动机。对于AC自动机里的每个状态,如果该状态不是结束状态,则下一个骰子扔出1~6的

2017-07-29 14:43:31 387 1

原创 HDU 2222 AC自动机 模板

AC自动机模板题。#include #include #include #include using namespace std;const int maxn=1000005;const int maxm=500005;int T,n;char s[maxn];struct Aho { struct state { int next[26],cnt,f

2017-07-28 20:29:19 203

原创 HDU 6052 To my boyfriend 分情况处理 DP 容斥

题意:给定一个n行m列的矩阵,每个格子上有一个颜色,询问任意选择一个子矩阵,其颜色种类数的期望。n与m分范围为100。解法:我们定义矩阵的价值为该矩阵的颜色种类数。显然求期望的话,可以考虑求出所有子矩阵的价值之和,除以不同子矩阵的个数。不同子矩阵的个数拿隔板法推一推可知是 (n+1)*n*(m+1)*m/4 的。接着考虑求出所有子矩阵价值之和。可以分别对每一种颜色进行处理。对于

2017-07-28 11:02:29 285

原创 HDU 6039 Gear up 2017 Multi-University Training Contest - Team 1 线段树维护到树根距离 区间修改 区间最值

照着题解慢慢写。http://bestcoder.hdu.edu.cn/blog/有几个需要注意的地方:1. 与父节点共边的判断,可以在dfs里面处理。2. 区分开具体点与共轴块的区别。#include #include #include #include #include using namespace std;typedef pair pii;typedef

2017-07-27 22:52:30 276

原创 VIJOI 1243 生产产品 前5个点错

两份代码第一份只能过后5个点第二份能过全部点原因是dp更新的时候弄错了。hack数据:5 2 1 11 1 1 1 15 5 5 5 5正确答案 17错误答案 13总结,dp[i][j]要全部更新完之后,再去更新单调队列,否则会将其他人做的第i位的答案拿去更新自己的第i位的答案,这样是不对的。第一份代码:#include #include #in

2017-07-23 14:32:01 265

原创 Codeforces Round #394 (Div. 2) F. Dasha and Photos 二维前缀和 矩阵神器

#include #include using namespace std;typedef long long ll;const int maxn=1005;const int maxk=300005;int n,m,p,x1[maxk],y1[maxk],x2[maxk],y2[maxk];ll tot[maxn][maxn][27],sum[maxn][maxn][27],res

2017-04-07 22:33:12 283

原创 Codeforces Round #378 (Div. 2) E. Sleep in Class 思维 没弄很懂

#include #include using namespace std;typedef long long ll;const int maxn=1000005;int n,pre[maxn],suf[maxn],mid;char s[maxn];vector u,d;ll sum1,sum2,p1,res[maxn];int main(){ scanf("%d%s"

2017-04-06 19:15:23 242

原创 2016 大连 K Guess the number HDU 5981 DP 打表找规律

弄清楚n^2 DP之后,打表能发现l与r随着n的增大是有规律的。用sum维护一下f的前缀和,就可以很快求出答案。#include #include #include using namespace std;const int mod=1e8+73;const int maxn=5e6+1;int a,b,dp[maxn],n,f[maxn],sum[maxn];int main(

2017-04-02 01:42:58 1204

原创 Codeforces Beta Round #3 D. Least Cost Bracket Sequence 贪心 优先队列

这题和 Codeforces Round #398 (Div.2) E. Change-free 几乎是同一题啊。题目传送门题解传送门题意:给定一个带有若干问号的左右括号序列,其中第i个问号可以以ai代价改成左括号,也可以以bi代价改成右括号。求一个代价最小的修改问号为左或右括号的方案,输出最终代价以及修改后的合法括号序列。不能修改成合法方案输出-1。解法:同上面的找钱问题,这

2017-02-21 16:40:09 345

原创 Codeforces Round #398 (Div. 2) E. Change-free 贪心 优先队列

题意:你有无数的面值为100的纸钞和m个硬币。收银员有无数的纸钞和硬币,但是他不爱找钱。收银员在第i天有愤怒值wi,若收银员找纸钞和硬币的总个数为x,则这一天他的愤怒程度为x*wi,给定你每天要花钱的数目,以及起始时手里的硬币,要求输出n天来收银员的最小总愤怒程度以及每天给收银员纸币与硬币的个数。解法:分析下样例并且稍加思考可以发现,多给纸钞是无意义的,所以每天的状态无非就是:1.把硬币给

2017-02-21 16:18:51 283

原创 AtCoder Regular Contest 069 D - Menagerie 枚举起点 递推

题意:一堆不明身份的动物排成一圈,身份可能是羊或狼,羊一定说实话,狼一定说假话。大家各自报自己的两边是同类还是不同类,问能否有一种满足每个人发言的方式。解法:已知i-1和i-2可以推i,所以枚举起点羊羊、羊狼、狼羊、狼狼四种可能,最后拿第0个以及第n-1个判断是否合法就行。代码写得比较暴力。。。#include int n;char s[100001],r[100001];boo

2017-02-20 01:37:00 503

原创 Codeforces Canada Cup 2016 F. Family Photos 博弈 策略分析 好题

题意:A和B博弈。有n个桶,每个桶里有两颗球,只能先拿走上面的球,再拿走下面的球,每颗球价值ai与bi,ai表示A拿走该球时获得的钱,bi表示B拿走该球时获得的钱。游戏目的:A和B均想使比赛结束时自己的钱比对方的钱多尽量多。每轮中,玩家可以选择拿球,或者不拿球,当一次轮换后A、B均选择不拿球,游戏结束。输出双方都用最优策略时,游戏结束后A与B的钱差值。解法:其实,两人要么一直不

2017-02-19 17:20:09 348

原创 Codeforces Round #238 (Div. 1) D. Hill Climbing 单调栈 LCA

解法:根据题意用单调栈维护可以看见的最右边的山峰,连边建树,对于每次询问,其实就是找两个节点的LCA,这个可以用tarjan一次性处理完。#include #include #include #include using namespace std;#define fst first#define snd secondconst int maxn=100005;typedef

2017-02-18 01:04:10 326

原创 BGSHOOT - Shoot and kill 离散化 树状数组或前缀和 ST表 模板题

先对出现的时间点离散化。树状数组维护前缀和,表示n种动物的出没。ST查询区间最值。wa了很多次,其实离散化的时候把x、y、l、r全都加进去,会省很多事。#include #include #include using namespace std;typedef unsigned int uii;const int maxn=100005;int n,q,l[maxn],

2017-02-15 11:48:27 322

原创 Codeforces Round #394 (Div. 2) E. Dasha and Puzzle 构造 坐标离散化

题意:给一颗树,问是否能够放到网格图里,保证只有横边和竖边,且边与边不相交。解法:开脑洞,先想能不能找到这样的树,树应该至少满足一个要求:1.根节点能有4个儿子,非根节点最多只有3个儿子。满足要求1,理论上就一定能找到这样的树,即可以另深度为d的边比深度为d+1的边长很多很多,这样使得各个方向的子图离的尽量远,不管子树的图形再怎么乱,子树和子树之间也不会碰在一起。满足这

2017-02-11 23:00:31 295

原创 AtCoder Grant Contest 10 F - Tree Game 博弈 dfs

题意:给定一棵树,每个节点有个权值,Alice和Bob轮流进行操作。给定游戏起点指针指向节点C。不断进行下述操作。1.将当前节点权值-1,然后将指针从该节点移动到相邻节点。出现一方不能移动(即指针指向的节点权值为0)即为输。解法:设sg[i]表示第i个节点是必胜态还是必败态,1为必胜,0为必败。需要发现两个重要的性质:1.先手只会往权值严格小于当前节点的地方走。

2017-02-10 15:29:49 527

原创 AtCoder Grant Contest 010 C - Cleaning dfs+逻辑+dp思想

题意:给定一个树,每个节点的权值为Ai,每次可以挑选两个叶子节点,将两个叶子节点之间路径上的权值-1。问最后能不能使得整棵树的权值为0。解法:验证解的存在性,就去试着找出一组可行解。这题从最末端的情况开始想就可以很容易想出dp。随便找个非叶子节点,将其作为整棵树的根,现在对这个有根树进行分析。首先可以将路径进行归类,对于一个非叶子节点A,经过其的路径可以分为两种情况:1.经

2017-02-10 15:09:02 463

空空如也

空空如也

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

TA关注的人

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