自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 训练周记#3

Day1上 分 大 胜 利感觉不久就能上2100了(兴奋地搓手手)化学作业好多

2020-09-22 20:20:54 122

原创 Codeforces Round #671 (Div. 2) (A~E)

Link~题面差评,整场都在读题A根据奇偶性判断一下即可。#include<bits/stdc++.h>#define ll long long#define N#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=n;i>=a;i--)#define inf 0x3f3f3f3f#define pb push_back#define mp make_pair#define

2020-09-22 20:15:00 120

原创 训练周记#2

Day1上分场组合数学+容斥设dp[j][i]dp[j][i]dp[j][i]表示选了iii个人,钦定了jjj一共有多少种,有dp[j[i]=(i−jd[i]−j)dp[j[i] = (^{d[i]-j}_{i-j})dp[j[i]=(i−jd[i]−j​),其中d[i]d[i]d[i]表示l[x]<=i<=r[x]l[x] <= i <= r[x]l[x]<=i<=r[x]的xxx有多少个,可以差分求出,然后对dpdpdp求前缀和,然后对约束容斥,钦定一些点,加上

2020-09-14 22:53:29 103

原创 Codeforces Round #670 (Div. 2) (A~E题解)

Link!Asb题B直接枚举求一遍#include<bits/stdc++.h>#define int long long#define N 100015#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=n;i>=a;i--)#define inf 0x3f3f3f3f3f3f3f3f#define pb push_back#define mp make_pair#d

2020-09-14 22:51:08 101

原创 Codeforces Round #669 (Div. 2) 题解

Link!A要么全输出111要么全输出000,注意111必须要是偶数个。#include<bits/stdc++.h>#define ll long long#define N 1005#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=n;i>=a;i--)#define inf 0x3f3f3f3f#define pb push_back#define mp make_p

2020-09-09 20:38:18 94

原创 Codeforces Round #668(Div. 2)(A~E题解)

Link!A倒过来输出。B对于每一个正数,计算出前面所有负数的和,如果这个正数不够用,答案加上正数减和的值。感觉不是很好解释,看代码吧。#include<bits/stdc++.h>#define int long long#define N 100015#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=n;i>=a;i--)#define inf 0x3f3f3f3f#

2020-09-07 21:17:17 147

原创 训练周记#1

Day1掉分场计数dp 一句话题解:恰好kkk个转换为钦定kkk个,剩下随意,二项式反演然后dpdpdpDay2计数dp/神必复杂度几句话题解:首先枚举最小值,发现最小值最大只有Vk\frac{V}{k}kV​,对每个最小值进行dpdpdp,求出dp[i][j]dp[i][j]dp[i][j]表示前iii个,选了jjj个,最小值大于等于枚举的值的方案数,发现可以双指针+前缀和做到O(nk)O(nk)O(nk),最后差分统计答案,复杂度O(Vk)O(Vk)O(Vk)。分数规划 一句话:套路题,二分

2020-09-07 21:05:21 133

原创 [JSOI2011]柠檬

Link!题意一次操作可以选择一段连续区间和一个颜色s0s_0s0​,获得s0t2s_0t^2s0​t2的收益,其中ttt是区间内这个颜色出现的个数。思路首先观察到取的顺序不影响结果,不妨从左到右取。注意到每次取的区间端点颜色一定一样,否则将不一样的颜色单独出来,显然更优。设dp[i]dp[i]dp[i]表示取到前iii个的最大收益,有转移方程dp[i]=max(dp[j]+(s[i]−s[j]+1)2)(col[i]==col[j])dp[i] = max(dp[j] + (s[i]-s[j]+

2020-09-03 22:20:25 216

原创 Codeforces Round #666 (Div. 1) (A~C)题解

Link!经典翻车A给出一种操作,每次可以给区间[l,r][l,r][l,r]中每个数加上一个r−l+1r-l+1r−l+1的倍数的数(可以不相同),现给出一个数列,要求恰好三次操作变成全零,输出方案。思路发现只要全都是nnn的倍数,可以一次操作清零,于是第一次操作将第一个清零,第二次操作选择[2,n][2,n][2,n],加到nnn的倍数(因为gcd(n,n−1)=1gcd(n,n-1) = 1gcd(n,n−1)=1所以很容易实现),最后一次清零即可。代码#include<bits/

2020-09-01 20:30:04 168

原创 点分治&&DSU on tree学习笔记

点分治luoguの模板题目描述给定一棵有 nnn 个点的树,询问树上距离为 kkk 的点对是否存在。思路递归处理每一个子树,容斥消除重复的答案,复杂度取决于递归的深度。考虑每次选子树重心作为根,复杂度O(nm log n)O(nm \ log \ n)O(nm log n)代码#include<bits/stdc++.h>#define ll long long#define N 10005#define W 10000005#de

2020-08-11 16:26:04 238

原创 F1. Flying Sort (Easy Version)(Codeforces Round #650)

Link题意给出一个系列,每次可以把一个元素放到开头或者放到结尾,问最少多少次操作能让他有序。思路观察发现每个元素至多操作一次,只需要考虑哪些元素需要操作。正难则反,我们可以考虑那些元素不需要操作,不需要操作的元素最后一定会相邻,所以他们本身就是要相邻的,设b[i]b[i]b[i]是离散化过后的数组,我们要找出最长的连续上升子序列,这里的连续指的是相差111。有:dp[b[i]]=dp[b[i]−1]+1dp[b[i]] = dp[b[i]-1]+1dp[b[i]]=dp[b[i]−1]+1

2020-08-03 11:36:58 164

原创 BOI D2T1 Graph

Linksubtasksubtasksubtask杀我,对着000分调了一个多小时。题意给出一个无向图,边分为两种。如果边是黑色的,则两个端点的权值和为111;如果边是红色的,则两个端点的权值和为222;现在要你给点赋值,要求点权的绝对值的和最小。思路设点uuu权值为xxx,则uuu所在连通块内每个点可以用ax+b,a=±1ax+b,a = \pm 1ax+b,a=±1的形式表示,进行dfsdfsdfs,如果发现环,则将方程解出。如果不存在环,则是一个形如∑i=1n∣x+bi∣\sum_

2020-08-01 18:24:18 112

原创 F. Decreasing Heights(Codeforces Round #642 )

Link题意给出一个n∗mn*mn∗m的矩阵,第i行第j列的高度为ai,ja_{i,j}ai,j​,每次只能向下或向右,并且移动的位置的高度差只能为111.你可以在走之前给一些位置高度−1-1−1,问最少多少次操作能让你找到一条路径。思路对于初始高度hhh,我们发现ai,ja_{i,j}ai,j​的高度是h+(i−1)+(j−1)h+(i-1)+(j-1)h+(i−1)+(j−1)于是有转移方程dp[i][j]={infa[i][j]<h+(i−1)+(j−1)min(dp[i−1][j

2020-07-31 12:11:58 102

原创 Binary Subsequence Rotation(Codeforces Round #651)

Link题意给出两个010101字符串s,ts,ts,t。定义一次操作为选出字符串的一个子序列,循环位移一个。问经过多少次操作能够让s==ts == ts==t。思路观察发现只有形如010101010101010101或101010101010101010之类的操作才有意义,对于连续的111,选了之后后面的几个111并不会改变,例如100111100111100111变成110011110011110011,第1,5,61,5,61,5,6位上的111还是111,因此选连续的0或10或10或1是没

2020-07-31 11:26:36 111

原创 Educational Codeforces Round 92 A~E部分题解

A. LCM ProblemLink题意给出一个区间[l,r][l,r][l,r],要求x,y∈[l,r]x,y \in [l,r]x,y∈[l,r]且lcm(x,y)∈[l,r]lcm(x,y) \in [l,r]lcm(x,y)∈[l,r],不存在输出−1-1−1。思路判断l,2ll,2ll,2l是否可行。代码#include<bits/stdc++.h>#define ll long long#define N#define rep(i,a,n) for (int i=

2020-07-30 01:05:59 130

原创 C. Kaavi and Magic Spell(Codeforces Round #635)

Link题意给出一个字符串TTT,和字符串SSS,一次操作可以从SSS的开头取出一个字符,加入新字符串AAA的开头或者结尾,问有多少种操作的组合,可以使得TTT是AAA的前缀。思路考虑dpdpdp,设f(i,j)f(i,j)f(i,j)表示使用SSS中前iii个字符,第111个字符与TTT的第jjj个对齐,有多少种方法。如果要把第iii个加入开头,有f(i,j)+=f(i−1,j+1)[S[i]==T[j]]f(i,j) += f(i-1,j+1) [S[i]==T[j]]f(i,j)+=f(

2020-07-29 11:42:08 108

原创 D.Omkar and circle (Codeforces Round #655)

题意给出一个环,上有nnn个数字,定义一次操作为将一个数字替换为相邻两个数字的和,并删去相邻两个数字。求最后剩下来一个数字最大是多少。思路一定会删去(n+1)/2(n+1)/2(n+1)/2个数字,简单手玩几个样例可以发现,剩下的数字一定是a3+a5+...+a2k−1+a2k+...+a8a_3+a_5+...+a_{2k-1}+a_{2k}+...+a_8a3​+a5​+...+a2k−1​+a2k​+...+a8​即几个连续奇数的位置加上几个连续偶数的位置,必有一奇一偶相邻,前缀和处理一下就可以

2020-07-28 22:24:19 99

原创 E. The Contest(Educational Codeforces Round 76)

Link题意给出nnn个数,分成三组,要求将第一组变成一个前缀,第三组变成一个后缀,最少要给多少个数字换位置。思路这题可以线性解,可以用样例帮助理解。Input2 1 35 641 2 3Output3观察这组样例,红色的格子是第一组数字,蓝色的第三组,红色的指针表示我们选的前缀l=3l=3l=3即选1−3作为前缀1-3作为前缀1−3作为前缀,蓝色的指针r=6r=6r=6表示我们选第666个作为后缀,于是我们需要填上前333个空格子,后一个空格子,以及将中间4−54-54−5的

2020-07-28 21:46:35 85

原创 「TJOI2015」棋盘

Link可以先看看大佬的博客,我是看了他的做法才会做的。题意给出一个3∗p3*p3∗p的攻击矩阵,棋子在第111行,第kkk列。阅读理解开始了,矩阵是从000开始标号的,也就是说棋子在中间那一行,要在一个n∗mn*mn∗m的矩阵上摆棋子,问你有多少种摆法能让棋子互相不攻击到。观察数据范围 n≤1e6,m≤6n \leq 1e6,m \leq 6n≤1e6,m≤6发现可以状压,显然每一行只跟上一行有关,预处理出这行的摆法下一行能摆什么(位运算),然后矩阵快速幂优化一下就行了,时间复杂度O(m3logn

2020-07-28 11:23:15 110

原创 「SCOI2015」国旗计划

Link题意给出一个环上的一些区间,每个区间都不会被其他区间所包含,要求选第iii个区间,还需要选多少个区间才能完全覆盖环。思路本题最关键的一点在于每个区间都不会被其他区间所包含,这意味着每个区间的左右端点单调递增,也就是一个区间必有一个最优的后继区间,即右端点小于本区间左端点的区间中,右端点最大的区间,可以通过二分/双指针求出。求出后可以对后继倍增,时间复杂度O(nlogn)O(nlogn)O(nlogn)。代码#include<bits/stdc++.h>#define ll

2020-07-27 22:21:39 260

原创 「SHOI2015」自动刷题机

添加链接描述思路简单题,二分即可。一开始忘记判无解的情况了,调了有一会儿。代码#include<bits/stdc++.h>#define int long long#define N 100015#define rep(i,a,n) for (register int i=a;i<=n;i++)#define per(i,a,n) for (register int i=n;i>=a;i--)#define inf 0x3f3f3f3f#define pb p

2020-07-27 22:13:54 107

原创 「SCOI2015」小凸玩密室

Link自己没做出来 看了menci的博客才会做题意小凸和小方相约玩密室逃脱,这个密室是一棵有 nnn个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯泡即可逃出密室。每个灯泡有个权值AiA_iAi​ ,每条边也有个权值 bib_ibi​。点亮第 111 个灯泡不需要花费,之后每点亮一个新的灯泡 VVV 的花费,等于上一个被点亮的灯泡 UUU 到这个点D(u,v)D(u,v)D(u,v) 的距离 ,乘以这个点的权值AvA_vAv​ 。在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮

2020-07-27 11:18:20 128

原创 「SCOI2015」小凸玩矩阵

Link题意给出一个N∗MN*MN∗M大小的矩阵,要求选出NNN个点,使得第KKK大最小,并且这NNN个点两两不同行,两两不同列。思路第KKK大就等同于求第N−K+1N-K+1N−K+1小,考虑二分答案,我们在权值小于二分的值的行和列之间建边,跑二分图匹配,如果匹配大小≥N−K+1\ge N-K+1≥N−K+1,则答案可以小于等于他。代码#include<bits/stdc++.h>#define ll long long#define N 255#define rep(i,a

2020-07-27 09:59:45 109

原创 [Ahoi2014&Jsoi2014]骑士游戏(SPFA)

Description【故事背景】长期的宅男生活中,JYY又挖掘出了一款RPG游戏。在这个游戏中JYY会扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽。【问题描述】在这个游戏中,JYY一共有两种攻击方式,一种是普通攻击,一种是法术攻击。两种攻击方式都会消耗JYY一些体力。采用普通攻击进攻怪兽并不能把怪兽彻底杀死,怪兽的尸体可以变出其他一些新的怪兽,注意一个怪兽可能经过若干次普通...

2020-03-28 15:52:19 210

原创 最小生成树(MST)相关三题

[SCOI2005]繁忙的都市Link这是一道模板题,不细讲。但是这涉及到最小生成树一个重要性质:uuu到vvv的路径中,最大值最小的一条是最小生成树上的一条路径。#include<bits/stdc++.h>#define ll long long#define N 305#define inf 0x3f3f3f3f#define pb push_back#defi...

2020-03-25 12:55:29 144

原创 [ZJOI2007]矩阵游戏 (二分图最大匹配)

Link题意给你一个010101矩阵,每个操作可以交换任意两行或任意两列,问能否使得右上角到左下角的对角线全是111。解法我们发现任意交换过后,同一行的111还在同一行,同一列的111还在同一列。于是我们只要求出有没有nnn个点,两两不同行,两两不同列。于是就是求二分图最大匹配,若G[i][j]==1G[i][j]==1G[i][j]==1就在iii和jjj之间建一条边,边的含义就是选了...

2020-03-23 21:58:44 95

原创 [HNOI2008]明明的烦恼 (prufer编码)

Link题意给出一棵树每个节点的度数,−1-1−1表示不限制度数,求满足这种度数的树有多少种?解法利用pruferpruferprufer编码的性质。pruferpruferprufer编码的求法,找出树中度数为111编号最小的节点,把他删去,并输出与其相连的节点。重复此过程,可以得到一个长为n−2n-2n−2的序列,即为pruferpruferprufer序列。pruferpruf...

2020-03-23 20:45:44 82

原创 [ZJOI2006]物流运输(dp,最短路)

Link题意给你一张带权无向图,包括起点和终点,在nnn天中,每天要选出一条路径,有几个点会在一段时间内不可用,若两天之间所选路径不一样,要花代价kkk更改路径。总代价是nnn天路径长度之和加更改代价。解法考虑dp[i]dp[i]dp[i]表示前iii天总花费,有dp[i]=dp[j−1]+(i−j+1)∗val+kdp[i] = dp[j-1]+(i-j+1)*val+kdp[i]=dp...

2020-03-23 20:21:06 133

原创 学习笔记:主席树

主席树(模板)前置知识:线段树题意给出一个数组,每次询问区间第kkk小。思路主席树是一种线段树,其对于每一个前缀维护值域。对于原数组S:S:S: [4,7,5,3,6,1,1,3][4 ,7 ,5 ,3 ,6,1 ,1 ,3][4,7,5,3,6,1,1,3]我们先将其排序去重可得到TTT: [1,3,4,5,6,7][1,3,4,5,6,7][1,3,4,5,6,7]对...

2020-03-21 17:07:33 846 2

原创 codeforces #1325-E Ehab's REAL Number Theory Problem题解

codeforces #1325-E Ehab’s REAL Number Theory Problem题解题面题意给出nnn个数字,每个数字至多有7个因子,让你求出最少选多少个数,能够使他们的乘积是一个完全平方数。做法考虑只有七个因子,不难发现一个数至多有222个质因子,并且每个质因子的指数对222取模不影响结果。所以每个数一定形如 1,p,p∗q1,p,p*q1,p,p∗q 这三...

2020-03-15 16:33:23 326

原创 codeforces1313D Happy New Year 题解

比赛时没做出来orz剩下一段时间去hack了不过当时估计也做不出了好难啊题目#include<bits/stdc++.h>#define ll long long#define N 200015#define M 1<<10#define lowbit(i) ((i)&(-i))using namespace std;int n,m,k,max...

2020-02-24 21:02:43 551

原创 做题笔记 “访问“美术馆 P1270

这是一道树形DP洛谷的链接代码#include<bits/stdc++.h>using namespace std;int n,cur;int f[1010][1010];void dfs(){ int w,num,now = ++cur; cin >> w >> num; w <<= 1;/来回乘以2 if(num){ f...

2019-05-26 16:19:46 124

原创 线段树

线段树太蒻了所以写一个笔记orz代码来源是洛谷的线段树板子侵歉删板子的链接建树首先是结构体存储struct tree{ int l,r;//左右边界 long long pre,add;}t[4*maxn+2];//这里注意开四倍的空间然后建就完事了p*2是左儿子p*2+1是右儿子void bulid(int p,int l,int r){ t[p]...

2019-05-23 20:58:47 161 3

空空如也

空空如也

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

TA关注的人

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