自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不来也不去的一只失忆蝴蝶

曾迷途才怕追不上满街赶路人

  • 博客(836)
  • 收藏
  • 关注

原创 [arc082e]ConvexScore

做法可以发现题意转换后就是选出点集能围成凸包的方案数。 不如考虑不能围成的情况一定是选的点全部共线。 瞎做就好了。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;typedef double db;const i

2017-11-03 11:07:05 546

原创 [arc081f]Flip and Rectangles

前言一开始想如何染色成功。 发现只需要讨论四元环。 然后发现可以直接把规模缩成2*2矩阵。题目大意一个黑白网格图,你可以翻转任意行和任意列的颜色,求以此得到网格图最大黑色子矩阵面积。做法结论是一个矩阵如果任意一个2*2子矩阵都有偶数个黑色,一定可以通过翻转操作扭转为全黑。 易证必要充分。 然后就可以做经典问题。#include<cstdio>#include<algorithm>#def

2017-11-03 09:37:14 516

原创 [arc058d]Iroha and a Grid

题目大意一个矩形,从左上角开始,只能往下或往右走,不经过左下角一个给定大小的矩形,到达右下角的方案数。做法显然可以容斥,统计非法方案,那么枚举左下角矩形最上面一行第一个到达的格子即可。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)

2017-11-03 08:41:28 834

原创 [arc080f]Prime Flip

题目大意有无穷个硬币,初始有n个正面向上,其余均正面向下。 你每次可以选择一个奇质数p,并将连续p个硬币都翻转。 问最小操作次数使得所有硬币均正面向下。做法不妨考虑差分。差分后1的数量一定为偶数。 然后一次操作[l,r]会翻转两端l-1与r。 现在问题变成两两配对使得操作次数尽量少。 有三种情况: 1、|i-j|是奇质数,那么1步即可。 2、|i-j|是偶数,那么2步即可。(2可以5-

2017-11-03 08:38:50 838

原创 [arc080e]Young Maids

题目大意一个长度为偶数的排列p,每次取出相邻两个数并从p中删除,然后将这两个数按顺序加入q的开头(q初始为空)。 问能得到最小字典序的q。做法在堆中保存若干个区间(l,r),以及从中选出最小的和l奇偶性相同的位置u,以及在这个位置之后最小的和r奇偶性相同的位置v。记作(l,r,u,v)。 然后我们每次从堆中取出a[u]最小的(l,r,u,v),并将u、v加至开头,然后把区间分裂成(l,u-1)(

2017-11-03 08:30:46 797

原创 [arc076f]Exhausted?

前言你们都会hall定理推广版本。 但是我没用hall定理做啊。题目大意一个二分图,X部每个点i连了Y部的[1,Li]和[Ri,m]。 求n-最大匹配。做法考虑到二分图最大匹配等于最小覆盖。 最优方案小我们一定是选择了Y部的一个前缀和一个后缀,剩余不能因此得到覆盖的X部点要选上。 假如我们枚举选了Y部的前缀l,假设Y部选的后缀是r,那么选的点为l+m−r+1+n−∑ni=1[Li<=l]∗[

2017-11-02 17:37:12 658

原创 [arc076e]Connected?

题目大意一个矩形,n个数字填入了其中,每个数字出现两次。 对于一对相同的数字,使用一条极端细的可弯曲的线连起来(不允许出矩形)。 是否存在一种连线方案使得任意两条线不相交。做法只有两个数字都在矩形边界上,连线会分割矩形。 不妨先不连这些数字对,最后再来连。 于是你可以发现只要这些数字对能合法就能合法。 按顺时针做个栈贪心就好了。#include<cstdio>#include<algor

2017-11-02 17:29:51 454

原创 [agc006f]Blackout

题目大意给你一个人有向图。 如果x->y,y->z,加上z->x。 重复该过程直到不能再添加。 求最终图中有多少边。做法每一个弱联通块独立。 尝试对一个弱联通块三染色,然后分为三种情况。 1、染色失败。 一定是出现了二元环或自环,此时所有边均会出现。 2、染色不完全(没有用完三种颜色)。 此时不会出现新的边。 3、染色成功。 所有染色为0的向1连,1向2,2向0。#include

2017-11-01 14:58:53 724

原创 [agc006e]Rotate 3x3

前言结论题。题目大意不想讲。做法不想说。 推荐在网上搜索其他题解或看官方题解。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;int tree[maxn],a[maxn][3]

2017-11-01 14:53:47 866 3

原创 [agc006d]Median Pyramid Hard

前言一道见过的题。题目大意一个长度为奇数的排列,令b[i]=median(a[i],a[i+1],a[i+2])。 median表示中位数。 不断执行上述变化序列最终变成1个数,它是什么?做法二分后变成01序列,考虑最终什么时候会是0。 我们发现相邻两个是同一个数字,这两列都是柱子,即从下到上都一样。 case 1:正中间是0柱子。 case 2:两边最近的柱子都是0柱子。 case 3

2017-11-01 14:51:45 624

原创 [agc005f]Many Easy Problems

前言居然有FFT题。题目大意给你一棵树,对于每个k求出在树上任选k个点形成虚树大小的和。做法假设这是有根树。 考虑一个点i对于一个k的贡献,考虑容斥。 Ckn−∑j是i儿子Cksize[j]−Ckn−size[i]C_n^k-\sum_{j是i儿子}C_{size[j]}^k-C_{n-size[i]}^k 假设a[i]表示最终答案中CkiC_i^k的系数,对于任何k来说a都是不变的。 然后

2017-10-31 10:52:10 735

原创 [agc005e]Sugigma: The Showdown

前言要知道怎么判-1,接下来就好办许多了。题目大意一个有红边和蓝边的图,只保留红边或蓝边都是一颗树。 现在A和B初始都在一个点上,轮流进行,A先操作。 A每次可以不动或沿着相邻的红边走到另一节点。 B类似,但只能走蓝边。 A和B相遇游戏结束。 A要最大化游戏时间,B要最小化游戏时间,若A永远不会被B抓到输出-1。做法当A到达一条红树上的边(x,y)的端点时(这条边满足x和y在蓝树的距离大于

2017-10-31 10:46:38 855

原创 [agc005d]~K Perm Counting

前言简单的容斥DP题。题目大意有多少排列对于每个位置i都满足|ai−i|!=k|a_i-i|!=k容斥当然是经典容斥问题了。 假如钦定某些位置不满足条件,其可以往前或后连。 发现只有模k相同的互相有影响。 不妨先做一个状压dp,f[i,j,s]表示有i个点,有j个点有出度(也就是j个不满足条件),其中i有没有入度,i+1有没有入度。 转移简单。 初始状态是f[1],注意第1个不能往前连。

2017-10-31 10:38:28 1126 1

原创 [agc005c]Tree Restoring

前言简单题,数据范围可能是吓人的。题目大意给你每个点到最远点的距离,求是否存在这样的一颗树。简单一个性质是每个点的最远点一定是直径的端点。 然后我们找出直径长度,要求能构造出这条直径(每种距离都有2个点,当然直径中心只需要1个)。 然后其余点都可以直接接在直径上,因此到最远点的距离不能少于直径长度的一半。 满足就能构造。#include<cstdio>#include<algorithm>

2017-10-31 10:31:44 602

原创 [agc004f]Namori

前言这题好牛逼啊。题目大意给你一颗全白的树或环套树。 你每次可以选择一条连接两个同色点的边,将两个端点反色。 问变成全黑的最小步数,要求判断无解。树的做法树是一个二分图,看起来很棒的样子。 我们不妨设深度为奇数(根的深度为1)的点是一个空位,而深度为偶数的点有一个硬币。 我们发现,一次操作相当于将一个硬币移到相邻的空位。 最终要求原本是空位的点都被硬币填满。 那么只有硬币数等于空位数才有

2017-10-30 15:26:34 1607 2

原创 [agc004e]Salvage Robots

前言本题的关键是想到让出口和矩形动,而不是机器人动,只要记录出口的位移矩形,便可以知道哪个区域的机器人已经飞出去了。题目大意一个网格图,有若干机器人,还有一个出口。 操作一系列指令让机器人上下左右,走出矩形就死,进入出口则得救。 最多救多少机器人?DP不妨认为矩形和出口会动。 我们设f[u,d,l,r]表示出口移动的上下左右,然后转移也很容易。 第一维可以省略,若如此做记得最后再执行往上的转

2017-10-30 15:04:29 820 1

原创 [agc004d]Teleporter

前言贪心题,我一开始想错了,最终算法其实很简单。题目大意n个点形成环套树,改变最少数量的点的出边,使得任意点出发走k步能走到1。 初始满足任意点能走到1。做法显然1一定要自环。 然后可以贪心了,自下往上做,满k要断出边。 详见代码。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using nam

2017-10-30 14:53:58 743

原创 [agc004c]AND Grid

前言构造题,我又不是很会…… 太蠢了。题目大意给你一个网格图,有一些格子涂了紫色。 请你构造出两个网格图,其中一个都涂了红色,且四联通,另一个都涂了蓝色,且四联通。 要求紫色的位置必须红和蓝,其余都不能同时涂红和蓝。 保证边界没有紫色。做法不看边界奇数都涂红,偶数都涂蓝。 然后对于红图第一列涂红,蓝图最后一列涂蓝。 一定满足条件。#include<cstdio>#include<alg

2017-10-30 14:49:22 632

原创 [agc003f]Fraction of Fractal

做法注意到上下左右都联通答案是1,都不连通答案是黑格数的次幂。 判掉后发现只有一边联通很好做,矩阵乘法上就行了。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;const int mo=1000000007;cha

2017-10-27 10:15:20 523

原创 [agc003e]Sequential operations on Sequence

前言利用了经典性质的题。题目大意有一个数字串S,初始长度为n,是1 2 3 4 …… n。 有m次操作,每次操作给你一个正整数a[i],你先把S无穷重复,然后把前a[i]截取出来成为新的S。 求m次操作后,每个数字在S中出现的次数。做法考虑这样一个过程,solve(x,l)表示在第x次操作后的S的前l位,我们希望获取每个数在这里面的出现次数(这个函数返回一个数组)。 不妨设S[i]表示第i次操

2017-10-27 10:12:21 935

原创 [agc003d]Anticube

前言简单贪心,最难的部分居然是分解质因数。题目大意从一个10^10的数列里选出最多的数,使两两乘积不为立方数。做法把每个数最简表示,即每个质因数的指数都模3。 还要求出这个最简数的补数,也就是满足最简的与其乘积为立方数的数。 对于数列中一个数集团和它的补数集团,贪心的选择较大的那个。 如果一个数和其补数相等,则只能选1个。 重点是求最简数以及补数。 枚举1010310^{\frac{10}

2017-10-27 10:04:50 1033

原创 [agc002f]Leftmost Ball

前言小清新计数题。题意n种颜色每种颜色有k个球(这n种颜色不含白色),排成一行,把每种颜色第一个球涂成白色。 问颜色序列方案数。DP要求任意后缀0的个数不比颜色种类数多。 不妨设dp表示f[i,j]已经用了i种颜色,放了i-j个0。 每次可以在最前面放0。 也可以新加一种颜色,为了不计重最前面的要是这种新颜色。 最后还要乘上颜色的阶乘。#include<cstdio>#include<a

2017-10-26 09:45:44 584

原创 [agc002e]Candy Piles

前言这次我做博弈题开始根据特殊态猜测必胜态,失败了。 这个模型转换还是有点厉害的。题目大意很多堆石子,两人游戏。 每次可以取走数量最多的那堆石子的全部石子,或取走每堆各一个石子。模型转换我们把一堆石子想象成一个石子个数*1的矩形。 把矩形从高到低排列变成一个图形。 我们每次可以删除最低下一行或最左边一列。 假设有一个点初始在(1,1),它在(x,y)表示[1,x)的列被删了,[1,y)的行

2017-10-26 09:42:02 557

原创 Astar百度之星2017转圈记

DAY 0坐飞机+坐车真累。 欢迎晚宴非常尬。 百度事情非常多。 拍mv是不是凉了?DAY 1如何30min从起点到起点。 坐车dfs到目的地。 强行比预计晚2h开始了比赛。 题目是贪吃蛇大作战。 第一阶段我主要在搞懂给我发的那些示例代码。 枚举类型是啥,不会啊。 咋编译啊。 我vector是不是不会用了,咋CE啊。 测试赛第一轮交了示例代码,往右走撞墙。 然后一开始的策略很

2017-10-25 14:20:11 966

原创 [agc002d]Stamp Rally

前言简单套路题。题目大意一副连通图,每次询问从两个点x和y出发走出两条路径,希望至少经过一次的点数量等于z,经过的边最大编号最小是多少。简单题假如可以暴力,你可以按编号从小到大加入边,如果x和y不在一个联通块,能经过的点等于两个所在联通块大小的和,否则等于所在联通块大小,找到第一次大于等于z的位置。 不枚举也可以二分。 那不如整体二分吧,并查集采用按秩合并,好处是容易撤销。#include<cs

2017-10-21 11:44:06 645

原创 [agc008d]K-th K

前言简单构造,一开始看错题瞎写了一发。题目大意给了一个长度为n的序列x。 请构造一个长度为n*n的序列a,只包含1~n这n个元素,每个元素出现n次,且对于元素i,a的第xi个位置是元素i,且前xi个位置恰好有i个i。构造显然可以正反各贪心一遍,不懂就看程序,正确性显然。 瞎填以后还可以n^3验证。#include<cstdio>#include<algorithm>#define fo(i,

2017-10-19 17:15:16 580

原创 [agc009e]Eternal Average

前言需要发现性质的dp。 重点在于发现性质。题意请构造若干k叉树,使得每颗均有n+m个叶子,有n个叶子点权为0,m个叶子点权为1,对于非叶子点权为儿子点权的平均数。 问最多构造多少k叉树,使得任意两颗根节点点权不同?DP令n个叶子的深度为x1~xn,同理m个叶子的深度为y1~ym。 发现根节点的点权是∑mi=1k−yi\sum_{i=1}^mk^{-y_i}。 如果所有叶子点权都为1,那么根

2017-10-19 16:13:59 806

原创 [agc009d]Uninity

前言我居然一开始觉得点分治最优秀。题目大意类似点分治过程,只不过分治中心任意选择。 求点分树最小深度。做法首先直接点分治深度不超过log,所以答案上界是log。 假设我们给每个点一个标号表示它在点分树的深度。 那么我们发现,对于两个标号同为k的点,它们的路径上一定存在一个点的标号大于k。 我们定义一个数k对于子树x是良好的,要满足x的标号为k或x子树中存在一点y标号为k且y到x路径上没有标号

2017-10-18 21:48:33 934

原创 [agc009c]Division into Two

前言DP题,还可以,不是很难。题目大意把一堆互不相同的数分成两个集合X和Y,其中一个集合X任意两数之差不小于A,另一集合Y任意两数之差不小于B。 问方案数,集合可以为空。DP把这些数排序。 接着添加第0个数无穷小以及第n+1个数无穷大。 我们假设A>=B。 设f[i]表示分配好了前i个数,第i个数去X集合的方案。 转移显然要找到上一个位置j。 第一种情况j=i-1,只要a[i]-a[i-

2017-10-17 22:19:06 558

原创 [agc009b]Tournament

前言简单题。题目大意若干轮比赛,每个人在某一轮可以参赛,和另外一个人pk,输的人淘汰。 最后1是冠军,已知其余每个人输给了谁,请问最少设置多少轮比赛?做法你显然可以根据每个人输给了谁建一颗树,然后处理f[x]表示x淘汰所有输给他的人所需要的最小轮数。 转移很简单,根据儿子的f排序,然后详见代码(不会说)。#include<cstdio>#include<algorithm>#define f

2017-10-17 22:12:40 662

原创 [agc010e]Rearranging

前言想到了相对顺序和连图。 想到了多个合并。 似乎没想到按照大小连出拓扑图,导致不知道怎么样才是最小不可操作的。题目大意一个长度为n的序列。 先手可以任意打乱,然后后手可以执行若干次以下操作:交换两个相邻且互质的数。 先手希望字典序最小,后手希望字典序最大,最后序列会变成啥样?做法容易发现对于不互质的一对数,相对位置永远不变。 我们让不互质的数之间连一条边,这样形成了图。 我们不妨从小到

2017-10-17 17:31:24 956

原创 [agc010f]Tree Game

前言发现树上博弈题很多。 大概思路都是你要想到一种简单不复杂的必胜必败态判断法。 再去证明两个东西就行了。 可能不是很正向思路。题目大意一颗树,每个节点上有一些石子,初始将一个小人放在某个节点上。 两人玩游戏,每次把小人所在节点上拿走一个石子(没有石子则游戏结束,当前操作者输),并把小人移动到相邻的一个节点。 问多少放小人的初始节点能使先手必胜。判断我们定义一个子树x是必胜的,当且仅当存在

2017-10-17 16:09:25 459

原创 [agc010d]Decrementing

前言博弈题,还挺有趣。题目大意一个正整数序列,gcd为1。 两人轮流操作,每次选择一个>1的数将其-1。 然后d是新序列的gcd,将所有数除以d。 不能操作者输。结论初始gcd为1,一定存在至少一个奇数。 如果有奇数个偶数,先手是一定必胜的。 先手先操作一个偶数变成奇数(此时场上就至少2个奇数了,然后此时有偶数个偶数),然后看后手表演: 后手将一个奇数变成偶数,先手就再把这个偶数变成奇数

2017-10-14 11:38:54 587

原创 [agc010c]Cleaning

前言这是一个与经典性质有关的题。题意一颗点权的树。 每次操作你可以选择两个不同的叶子(度数为1的点),满足其间路径任意点点权不为0,然后把这些点点权-1。 是否能通过任意次操作使得所有点点权为0?做法首先判掉n=2那么一定可以找到度数>1的做根。 我们假如把操作这样描述: 一颗点权边权树,初始边权均为0。 每次操作选择两个不同的叶子,将路径上边边权+1。 最后对于每个叶子,其相连所有边边

2017-10-14 09:05:40 512

原创 [agc011e]Increasing Numbers

前言1min了我还不会一点思路都没有这正常? orz题解。题意把大整数n拆成若干个上升数之和,最小化上升数的个数。 上升数即从最高位往最低位是一个不下降的序列。做法发现任意上升数能表示成全1数的和。 如果你允许0的存在,那么每个上升数都能被拆成9个全1数的和。 全1数的位数假如是k,可以表示成10k+1−19\frac{10^{k+1}-1}{9} 刚好0是-1位,代入该式子也成立。 现

2017-10-12 21:25:37 840 1

原创 [agc011d]Half Reflector

前言推了一会儿发现很有趣哦。 没有看题解,可能做复杂了。题意一个长度为n的AB串。 每个位置实际是一个机器,机器有两种状态A和B。 每当一个球从左右某一端进入一个机器时,如果是A状态,就从同一端扔出去,否则从另一端扔出去。每次这样后机器会更改状态。 从最左端的机器左端扔一个球,最后一定会从最左或最右弹出。 问从最左端依次扔k个球,最后AB串长啥样。做法不妨先表示成01串,A是1。 从左端

2017-10-12 21:12:42 676

原创 [agc011c]Squared Graph

前言很简单的计数套路。 没看过题解我有可能做复杂了。题意不想讲。做法先讲原图孤立点统计贡献,接下来讨论的所有点均不孤立。 我们想要统计一个联通块,可以统计特征点的个数。 即对于一个x.y,如果其是特征点,不存在与其联通的一个点t.u满足t<xt<x或x.z满足z<yz<y。 容易发现特征点第一维只能是原图中其所在联通块的最小编号点。 第二维如果也是最小编号点,显然也是可以的。 还有一种情

2017-10-12 16:49:25 764

原创 [agc019f]Yes or No

前言一道数形结合的题目。 发现本质则十分简单(考虑分数相加则麻烦无比)。题意n+m个询问,有n个询问的答案是Yes,其余m个是No。 你依次回答这些询问,每个询问给出Yes或No,给出后告诉你答对了没有。 求最优策略下你期望答对的询问个数。解法不妨令n>=m。 最优策略,选择剩余多的,一样多乱猜一个。 然后画一条y=x的直线。 你假设从一个(i,i)走到(0,0)中途不到对角线。 那么

2017-10-12 16:44:05 911

原创 [agc019e]Shuffle and Swap

前言计数水平不行了。 居然不会n^2去dp这个模型。题意太麻烦了看网站。DP假设有x个公用1和y个非公用1。 用图论来理解。 最后一定形成y条链,若干个环。 其中链中的边在序列中要按顺序,环则随意。 环可以先不管。 考虑dp[i,j]表示目前做出来两个i+j的序列,有i个公用1和j个非公用1,区分编号,有顺序,形成j条链的方案数。 有dp[i,j]=dp[i-1,j]*i*j+dp[i

2017-10-11 22:38:21 627

原创 [agc019d]Shift and Flip

前言这是一个简单题但是我细节一开始没想清楚?题目大意两个01字符串a和b,你可以把a左旋、右旋。 还有一种翻转操作,如果bi=1那么你可以把ai取反。 问a变成b最少操作次数。做法先判断无解,当b中有1时一定有解,全0时如果a不是全0就会GG。 然后看看怎么算答案。 先对每个位置预处理至少左移/右移多少次才能让它对应一个b中有1的位置,分别记为L和R。 我们可以枚举最后的对应位置i。 然

2017-10-10 21:40:23 752

空空如也

空空如也

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

TA关注的人

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