自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hee的博客~

Hee的博客~

  • 博客(124)

原创 解题报告: Codeforces Round #527 (Div. 3)

好久没打CF了,低迷了一段时间后又忙于搬砖和摸鱼等等0_0 工作后发现有时间写写题和题解也是一种享受的,当然水平还是一如既往的菜的... C、Prefixes and Suffixes 题目大意:有一个长度为n的字符串,给出分别长度为1~n-1的前缀和后缀的乱序排列,总共有(2n-2)个排列,问每个给出的排列是前缀还是后缀。 思路:由最长的两个n-1的排列可以确定4种字符串,因为数据也不大...

2018-12-23 16:47:40 129

原创 解题报告:Codeforces Round #432 (Div. 1) D. Tournament Construction (DP+构造)

题目链接 题意: 给出点的出度的去重集合,要求构造一个最小点数的竞赛图 并存在一个出度序列(d1,d2,d3...dn)满足任意前缀k项和大于k*(k-1)/2 (点数 思路: 可以确定点数的上界为61   ( n*30>=n*(n-1)/2 ) 定义: dp[ n ] [ m ] [ l ] :能否用集合的前m项(至少取一个)构造出n个点  l 条边的图

2017-09-07 20:45:13 227

原创 解题报告:Codeforces Round #433 (Div. 1) D. Michael and Charging Stations (DP)

题目链接 题意: 已知接下n天每天的消费ai 若某一天只使用现金,则可以得到10%的消费作为代金券 询问度过这n天的最小花费 n 思路: dp[x][y]:第 x 天手上有y金额的代金券所需的最小花费 将ai除以100以缩小第二维的大小,那么可以确定y 因为使用代金券会无法得到代金券,所以每次使用时要尽可能的大 得到递推方程: 当只使用现金时:

2017-09-07 16:43:31 387

原创 解题报告:Codeforces Round #433 (Div. 2) E. Boredom ( 离线处理+树状数组)

题目链接 题意: n*n的矩阵,有n个不同行列的格子染色,染色的格子两两之间组成的矩阵定义为beautiful。 q组询问,每次给出一个矩阵,询问与它相交的beautiful的矩阵的数目 n,q 思路: 每次查询分成九个矩阵,只需要知道各个矩阵中的染色的点数,即可得出答案 其中五个矩阵可以由染色的性质可以直接得出答案 离线处理另外四个即可 代码: #include

2017-09-07 09:56:36 613

原创 解题报告:HDU_6176 Function Counting (离散化DP+矩阵快速幂)

题目链接 题意:求满足题目的三个要求的置换的方案 思路: 分析题意发现是一个多重背包 设每个物品的代价为x,价值为y 则物品的代价为满足(2*t+1)*x==k , t 为自然数 对应的价值为2^x 代价为1和2的物品的价值比较特殊,为2^(x-1) 另外代价为2的物品会带上一个(4,4)的物品(交叉取置换) 于是就可以得到一个线性递推方程,基于n和k的范围采用不

2017-09-06 20:01:54 344

原创 解题报告:Codeforces Round #432 (Div. 2) E.Arpa and a game with Mojtaba (博弈)

解题报告 题意: 有n个数,你每次可以选择一个素数p,和一个整数k n个数中至少存在一个数x满足:( p^k | x ) 然后将n个数中所有p^k能整除的数除以p^k 两个人轮流进行操作,无法操作的一方输,问初始局势的胜负态 思路: 很明显不同素数之间的局势相互独立,O(n*sqrt(maxa))处理出后可以状压至二进制 那么答案就是各个素数的局势的sg异或 但是发现素数

2017-09-05 19:27:15 334

原创 解题报告:Codeforces Round #432 (Div. 2) D. Arpa and a list of numbers 暴力

题目链接 题意: 给定一个序列含n个数,定义这个序列为good当序列里的所有数的gcd>1,你有两种操作: 1:删除一个数,代价为x 2:将一个数加一,代价为y 求把序列变成good的最小代价 思路: 如果知道gcd,可以在O(n)内求出最小代价 可以发现性质:当n个数中公因子越多,选这个公因子做gcd需要变动的数越少,代价可能会越低 于是枚举时限内尽

2017-09-05 10:05:02 247

原创 解题报告:HDU_6184 Counting Stars (三元环计数)

题目链接 题意: 给定一张无向图,求以下图形的方案数,点集或边集不同认为是不同方案 点数和 思路: 考虑中间的边,它组成的三元环中任选两个都能组成不同的满足要求的图案 因此跑一遍三元环统计出每条边能组成的三元环个数 偷懒用unordered_map可以卡时限过,最好用hash 代码: #include #define LL long long #

2017-09-04 19:29:44 288

原创 解题报告:HDU_6189 Law of Commutation (找规律)

题目链接 题意: 给定n,a,求区间 [ 1 , 1的个数 思路: 打表发现以下规律 1、若a为奇数,答案为1 2、若a为偶数,则对于大于n的b,满足,其中a2,b2为a,b含2的因子个数 3、对于小于n的b,满足的情况有点多,直接暴力check 代码: #include using namespace std; inline long l

2017-09-04 16:10:24 405

原创 解题报告:HDU_6185 Covering (轮廓线DP+高斯消元+矩阵快速幂)

题目链接 题意: 给一个4*n的表格,你有两种矩阵(1*2),(2*1),询问放满的方案数。 n 思路: 显然公式应该是一个线性递推方程,知道后可以用矩阵快速幂在O( log(n) * m^3 )求得答案(m为方程的项数) 为了求这个方程,我们可以用轮廓线DP求的方程的前k项 然后假设一个k>m,用高斯消元求k*k的矩阵的秩,从而求得m 再用高斯消元求得方程即可

2017-09-03 10:53:34 589

原创 解题报告:HDU_6169 Senior PanⅡ (记忆化搜索)

题目链接 题意: 给定一个区间 [ L , R ] ,询问区内所有最小因子(除去1)为K的数之和 1 官方题解: :  思路: 如果数据范围小一点,应该很容易想到dp的做法 数据范围很大,也可以用离散化DP去做,当然直接用map去跑会超时,需要优化 考虑第一维的大小递减很快,小数据的答案用到的频率会远远多于大数据的频率 那么小数据直接用数组保存,大数据直接用搜索

2017-09-02 16:25:45 190

原创 解题报告:LightOJ_1406 状压DP

题目链接 题意: 给定一张有向图,问最少能拆成几条路径要求包含所有点 且 不同路径之间没有重点,同一可以重复经过同一点(点数 思路: 定义 ok[x][y]:x集合是否存在一条以y点结尾的路径 dp[x]   :x集合的最少路径数 dp[x] = min( dp[i] + dp[j] )      i^j==x && i&j==0 因为有环,那么每次处理出一个可行的ok

2017-09-01 08:36:55 150

原创 解题报告:HDU_6123 Destroy the cube (容斥+三元环计数)

题目链接 题意及官方题解: 记录一下自己的做法: 首先如果可以直接跑全部的黑色位置,那就很好写,但是肯定会超时,所以一定要用对称性优化。 如果n为偶数,可以完美拆成八个完全一样的小正方体的子问题,很好写 如果n为奇数,问题就变得复杂而且要考虑各种细节。。 先不考虑最中间的面,解决八个小正方体的子问题 把中间面的所有黑色位置建图跑三元环 然后发现会有重

2017-08-30 20:25:12 637

原创 解题报告:HDU_6129 Just do it (找规律 两种做法)

题目链接 题意及官方题解: 思路:看到另一种做法,要巧妙一点,记录一下 解法一(官方): 打出当前位对后面位的贡献表,发现是个斜杨辉三角 只有组合数为奇数才用贡献,由Lucas可知组合数C(n,m)为奇数等价于(n&m)==m 这样就可以枚举m(1~n-1)快速更新答案 虽然复杂度看上去是O(n^2),但是满足要求的组合数并不多(不会证明。。),能

2017-08-21 21:24:32 194

原创 解题报告:HDU_6122 Color the chessboard (计数)

题目链接 题意及官方题解: 思路: 分析题意可以发现计数只需要维护2*2的矩阵满足题目要求即可 将奇数格的颜色翻转发现矩阵只会有三种形式: 1、每一行颜色相同 2、每一列颜色相同 3、全部的颜色相同 然后容斥一下即可 代码: #include const int mod = 998244353; const int N = 1e3+5; using n

2017-08-21 17:25:41 275

原创 解题报告:HDU_6139 Galaxy at War (阶梯博弈)

题目链接 题意: 一张n*m的表格上有一些格子有一些水晶球,两个人轮流进行游戏 每次选择一个有水晶球的格子,选择其中至少一个水晶球将它左移或者下移,不能出界 还有一些格子上有M(Meditations)或者P(pollutant sources),对应的作用为 当你选择的格子上有M时,若你选择移动 t 个水晶球,那么会将2*t 个水晶球平分到可以移动到的格子内 当t个水晶被移动到有

2017-08-20 21:06:49 327

原创 解题报告:HDU_6134:Battlestation Operational (莫比乌斯反演)

题目链接 题意: 求 思路: 本来出题人想考的不是反演,但是用反演做意外的简单。。 原式: 做反演: 令 易知:    ( D( x ) 为 x 的因子个数 ) 那么可在内预处理出 g() ,再在线性时间内得到g()的前缀和 每次查询的复杂度,总复杂度 代码: #include const int N = 1e6+10; const l

2017-08-18 17:06:13 170

原创 解题报告:HDU_6128:Inverse of sum (二次剩余)

题目链接 题意及官方题解: 思路: 已知公式: 转换一下: 对于每个y,满足要求的x为: 只需要求的y的系数在(%mod)意义下的等价式即可 等同于求sqrt(-3)的等价式,也就是求p-3在(%mod)意义下的二次剩余( Cipolla's algorithm ) 注意一些细节:不考虑0、mod=2、mod=3、x==y时的计数 以及 不存在p-3

2017-08-18 16:39:43 233

原创 解题报告:HDU_6127:Hard challenge (极角排序)

题目链接 题意及官方题解: 补充: 我是以到x负半轴的弧度进行排序,然后扫过(0~PI)的弧度,中间每扫过一个点都要可能更新答案 代码: #include const double pi=acos(-1.0); using namespace std; class point { public: int x,y,v; double radi

2017-08-18 10:33:52 158

原创 解题报告:HDU_6136:Death Podracing (优先队列+循环链表)

题目链接 题意: n个人以不同的速度在环上顺时针或逆时针移动,每次相遇,移除下标小的,问最后只剩下一个人的时间的分数形式 官方题解及思路: 也不是第一次写循环链表的题了,还是写了好久。。 注意维护循环链表时要同时更新左右指针 代码: #include const int N = 1e5+10; using namespace std; struct no

2017-08-18 10:15:28 380

原创 解题报告:CROC 2016 - Elimination Round F. Cowslip Collections (莫比乌斯反演)

题目链接 题意: 给定一个大小为n(n 每次询问给往集合中插入一个数,求当前集合的贡献 集合的贡献为所有大小为k的集合的gcd之和 思路: 刚开始想歪了 令 f[ x ]:集合大小为k且gcd()==x的集合数量 num[ x ]:所有的数中x倍数的个数 那么答案为 刚开始想歪了: 想用树状数组维护后面的部分,均摊复杂度应该能过。。 但是维护树

2017-08-14 20:04:57 214

原创 解题报告:Codeforces Round #325(Div. 1) E. Present for Vitalik the Philatelist (莫比乌斯反演)

题目链接 题意: 给n(n 能从中选出一个数x,在从剩下的数中选出一个非空集合S,满足: S的gcd不为1,gcd(S,x)为1 询问满足的方案数 闲扯: 本来O(nlog(n))的想法,交上去一直T。。。 以为卡常数,优化了还是T。。。 发现中间有个部分写成O(n*sqrt(Ai))的级别。。。 改了后3000+ms过了。。。 思路:

2017-08-13 21:13:18 209

原创 解题报告:Codeforces Round #142 (Div. 1) C. Triangles (思维好题)

题目链接 题意: 给定一个图,求这个图以及它的补图中长度为3的环的数目 思路: 一道不错的思维题 为了方便表述,定义原图给出的边为实边,补图的边为虚边 那么所有三角环的组成一共有4种格式 为了制定出满足题意的规则,设: a:一条虚边+一条实边 的点数 b:两条虚边的点数 c:两条实边的点数 根据4种格式的三角环可以得到联立方程组: 对应的意思为:

2017-08-13 20:16:58 197

原创 解题报告: Codeforces Round #305 (Div. 2) E.Mike and Foam (莫比乌斯反演)

题目链接 题意: 有一个长度为n(n 序列中的每个位置对应一个数ai(1 每次操作给一个数x,代表挑出的序列中的下标为x的数 若对应下标的数已经被挑出,那么就把它放回去 每次操作完,询问所有挑出的数中互质的对数 刚开始时所有数都没有被挑出 思路: 刚开始的没有数被挑出,那么初始答案为0。 令num[i] :挑出的数中 i 的个数 如果当前操作的数为x,

2017-08-12 22:06:58 147

原创 解题报告:Codeforces Round #146 (Div. 1) E. Number Challenge 莫比乌斯反演

题目链接 题意: 给定n,m,l,求 d(x):x的约数个数 思路: 加强版的约数个数和 ( 解题报告:BZOJ_3994 约数个数和 莫比乌斯反演学习题)? 代入公式 得到 得到 代入常用的公式: 得到: 这个式子的复杂度为 但是可以发现对于一个数k,只需要用到和它互质的部分 那么可以在的时间内预测出每个数的互质的所

2017-08-12 20:13:01 394

原创 解题报告:HDU_6102 GCDispower (离线处理+莫比乌斯反演)

题目链接 题意: 给一个全排列,每次询问一个区间的函数 官方题解: 思路: 题解已经说的很详细了Orz....记录一下容斥反演的部分 令num(d)为已经扫过的数中d的倍数的个数,预处理出每个数的有效因子(对应的反演系数不为0),就能在均摊O(log(n))的时间得出 那么每个当前正在扫的数对它前面的区间的贡献为 A[r]为当前的右端

2017-08-11 11:06:50 438

原创 解题报告:BZOJ_3529:数表 莫比乌斯反演+离线处理

题目链接 题意: 一张n*m的表格,( i , j )的格子上的数为gcd( i , j ) 的约数和,询问所有格子的不超过a的数之和,T组数据。 1 思路: 这题很多细节不是很容易想到。。 为了方便表述,定义: F(x):x的约数和,可以预处理得到 G(x):满足题目的gcd==x的组数 我们先分析g[i]: 得到: 这个看上去已经很

2017-08-07 21:25:45 172

原创 解题报告:HDU_4947:GCD Array 莫比乌斯反演+树状数组

题目链接 题意: 长度为n的数组,初始值为0。 有两种操作: ①给定a,b,x,将所有下标 i 满足 gcd(a,i)==b的位置加上x ②给定x,查询 1~x 的前缀和 思路: 对于操作①,显然无法更新所有的满足要求的下标 稍作分析可以发现,对于每次更新操作的贡献,只需要更新每个反演式的第一个位置 那么查询的时候,每个位置的贡献就是( x/i ) 因为

2017-08-07 15:20:40 213

原创 解题报告:HDU_5909:Tree Cutting 树上FWT

题目链接 题意: 给定一棵树,树上每个结点有它的权值,现在问在树上选一些连通的点,使得这些点的权值的异或结果 等于0~m-1的时对应的方案数。 思路: 对每个子树统计选定根的方案数,那么答案为: 因为每个分支可以选也可以不选,那么在进行FWT之前对每个儿子进行dp[son][0]++的操作 代码: #include const int mod = 1e9

2017-08-03 20:53:16 152

原创 解题报告:CodeForces - 662C:Binary Table FWT(快速沃尔什变换)

题目链接 题意: 给定一个至多20*100000的01矩阵,可以选择任意行或列,选择行或列的01值改变,问经过操作能到最少的含1的数量。 思路: 因为行最大为20,考虑将每一列压缩成一个20位的整数,选择的行也最多只有20,同样压缩到一个20位的整数。 改变行上的01值,对应的操作为异或,那么就能写出对应的卷积式: 根据异或运算的性质,可以交换j,k的位置,得到: C[k

2017-08-03 08:50:21 627

原创 解题报告:HDU_6061 RXD and functions NTT

题目链接 题意及官方题解: 思路: 先感谢Q巨指点Qrz... 先求得系数式: 拆开组合数: 把系数提取出来稍作变换: 整理一下: 得到: 然后就可以直接进行NTT了。。 代码; #include const int mod = 998244353; const int N = 4e5+10; con

2017-08-02 10:27:38 1320 2

原创 解题报告:BZOJ_2154: Crash的数字表格 莫比乌斯反演

题目链接 题意: 给定n,m( 思路: 预处理和的前缀和,这样就能在时间内得出结果 总复杂度为 代码: #include using namespace std; const int mod = 20101009; const int N = 1e7+10; vectorpr; bool Np[N]; int mu[N]; in

2017-08-01 08:49:22 233

原创 解题报告:HDU_5663 Hillan and the girl 莫比乌斯反演

题目链接 题意: a为小于等于n的正整数,b为小于等于m的正整数,求gcd(a,b)为平方数的计数 思路: 一个直接暴力的做法就是分别求每个平方数的计数,然后加起来 这样的复杂度为 极限数据时达到了O(1e10)的时间复杂度,肯定是会超时的。 换个思路: 令f(x)表示gcd(a,b)为x的组数,它的答案为 我们要求的是f(1)+f(4)+f(9)

2017-07-31 19:27:34 368

原创 解题报告:HDU_6053 TrickGCD 莫比乌斯反演

题目链接 题意: 给一个长度为n的数组A,让你构造等长的数组B,B数组中的元素取值为小于等于A数组中对应位置的元素,现在询问B数组中的gcd大于等于2的方案数 思路: 很容易推出反演式: 转换一下 f ( i , d ) 为 [  a / d ] = i 的A数组中的元素个数,用一个前缀和数组维护就好 那么复杂度就降到了O( n log(n)) 了 代码

2017-07-27 18:01:17 2054 2

原创 解题报告:HDU_6042 Journey with Knapsack 生成函数

题目链接 题意: 你有一个容量为2*n的背包,现在有n种食物,第i种事物的体积为i,数目为ai个。还有m种武器,每种武器体积为bi。 现在要求背包里装一个武器,任意食物的方案数。 思路: 官方给的就很详细了Orz...... 不懂五边形数定理的同学可以看维基的介绍:五边形数定理 、分割数 代码: #include con

2017-07-26 19:14:04 743

原创 解题报告:HDU_6040 Hints of sd0061 STL::nth_element

题目链接 题意: 给你一个序列的递推函数,m次询问,询问这个序列上第bi小的数。 官方题解: 最关键的部分在于了解STL里的nth_element函数,简单介绍一下: 这个函数的时间复杂度近似线性 函数的调用(取第n小):nth_element ( arr.begin() ,   arr+n,arr.end() ) 调用函数后保证比第n个数小的

2017-07-26 10:06:47 699 2

原创 解题报告:HDU_6035 Colorful Tree 树上计数

题目链接 题意: 给定一棵树,树上每个结点都有一种颜色,询问路上任意两点之间的路径上包含的不同颜色数目和。 思路: 正着求不好求,先认为所有的路径上包含所有出现过的颜色,那么只需要减去每个颜色没有出现过的路径之和。 官方题解: 单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和。反过来思考只需要求有多少条路径没有经过这种颜色即可。直接做可以采

2017-07-26 08:54:40 284

原创 解题报告:HDU_5656 CA Loves GCD DP

题目链接 题意: 给n个不同的数,求所有非空子集的gcd之和 思路: dp[ i ] 表示 gcd 为 i 的子集数 每读入一个新的数x,可以如果将x与gcd为i的放在一起会导致gcd(x,i)的方案数增加dp[ i ] 种 如果 i = x,那么还会额外多一种方案(只放x)。 因为 较小的gcd(x,i)可能会用到同阶段的较大的 i ,所有操作顺序要从小到大。

2017-07-24 20:17:59 164

原创 解题报告:POJ_3904 Sky Code 莫比乌斯反演|容斥

题目链接 题意: 给定n个数,要求从中选出4个数,使得这4个数的最大公因子为1,求满足条件的组数。 思路: 简单的容斥,用f(x)表示最大公因子为x的倍数的组数,那么答案为: ans = 代码: #include #include #include using namespace std; const int N = 1e4+10; int

2017-07-24 15:08:47 203

原创 解题报告:SPOJ - VLATTICE Visible Lattice Points 莫比乌斯反演

题目链接 题意: 有一个边长为n的立方体,你位于(0,0,0)处,问能看见的格子数目。 某个格子能被看见当且仅当它与原点的连线上不存在其他的格子。 思路: 之前做过一个二维的版本:HDU2841 Visible Trees 莫比乌斯反演 思路是差不多的,分成三个部分求: 对于(x!=0&&y!=0&&z!=0)的所有点,要求 gcd(x,y,z)==1的点数

2017-07-24 14:45:20 159

空空如也

空空如也

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