- 博客(55)
- 问答 (1)
- 收藏
- 关注
原创 CF1095D Circular Dance
题目:CF1095D Circular Dance思路:把每个点后面两个点之间连一条无向边,然后dfs找环就可以了。但是要注意下,从第一个点开始dfs时,要走指向它后面的点的路,不然整个环就会找反。代码:#include<bits/stdc++.h>using namespace std;#define read(x) scanf("%d",&x)#def...
2018-12-28 18:09:58 574
原创 洛谷 P2444 [POI2000]病毒
题目:病毒思路:首先把所有病毒代码建成trie。然后建出fail指针,顺便完成AC自动机的优化。然后分析样例可以获得这样一棵trie图——301 11 00000其中黑边是trie的正常边,绿边是在处理AC自动机时连上的优化边,红边是fail指针。节点内部的数是节点权值,旁边的是节点编号。可以知道,一个无限的文本串,在AC自动机匹配的过程中一定会“死循环”,即存在环状的...
2018-12-28 16:05:06 219
原创 CF1080D Olya and magical square
题目:Olya and magical square思路:首先,n>31时可以不用考虑,因为只需要划分左上角或右下角的正方形就足够了。令f[i]f[i]f[i]表示把大长方形2n2^n2n划分成全部是边长为2n−i2^{n-i}2n−i小正方形的划分次数。g[i]g[i]g[i]表示形成边长2n−i2^{n-i}2n−i通路需要的最小划分数。f[i]=2i∗2−2+f[i−1]f...
2018-12-27 13:37:09 191
原创 一些奇怪的东西?
点到链的距离设点kkk,链的端点(i,j)( i , j )(i,j),点到链的距离为DDD。定义d[i,j]d [ i , j ]d[i,j]表示点iii到点jjj的距离。可得 D=d[i,k]+d[j,k]−d[i,j]2D=\frac{d[i,k]+d[j,k]-d[i,j]}{2}D=2d[i,k]+d[j,k]−d[i,j]原理如图:...
2018-12-26 22:22:15 161
原创 CF1080C Masha and two friends
题目:Masha and two friends思路:首先这题思路很简单,模拟+容斥就可以了。即 最终的白块数 = 原网格图的白块数 + 涂白增加的白块数 - 涂黑减少的白块数 - 又涂了白又涂了黑的那一块减少的白块数。这里重点说下怎么求两矩形交,我最开始就是这里不会写的。下面的题解大多分类讨论了,其实可以不用讨论的。如图,要求黑色矩形和红色居心的交。设黑色矩形左上角坐标 ( x...
2018-12-26 22:19:48 287
原创 CF1080B Margarite and the best present
题目:Margarite and the best present思路:其实我们可以先列个表看看的——a_i -1 2 -3 4 -5 6 -7 8 -9 10sum_i -1 1 -2 2 -3 3 -4 4 -5 5 //sum是a的前缀和找个规律——发现sumi=⌊i−12⌋×(−1)isum_i=\left\lfloor\dfr...
2018-12-25 21:07:33 222
原创 CF1080A Petya and Origami
题目:Petya and Origami思路:膜你题,就是输出x/k+y/k+z/k就可以了。要注意向上取整。代码:#include<bits/stdc++.h>using namespace std;#define maxn 100000000#define read(x) scanf("%d",&x)int n,k;int main() { ...
2018-12-25 17:30:25 301
原创 洛谷 P2149 [SDOI2009]Elaxia的路线
并不会写先存个档#include<bits/stdc++.h>using namespace std;#define maxn 1500#define read(x) scanf("%d",&x)#define inf ((int)(1e9))struct Edge{ int x,y,z; Edge(){} Edge(int xx,int yy,int z...
2018-12-25 17:00:14 155
原创 洛谷 P2055 [ZJOI2009]假期的宿舍
题目:假期的宿舍emm……为什么二分图会写错这么多次?我不会说是因为我建图建错了的……思路:我好像没有说过我建错了图,二分图匹配好像没有什么好说的,所以这里说下建图的问题。首先,我们考虑用学生和空床匹配。床的个数一定等于本校学生人数,因为不管学生是否离校,他们的床都在。需要和床匹配的人数就是 没有回家的本校学生人数 + 非本校学生。所以,一个人 i 可以和 j的床 连边的条...
2018-12-24 23:24:49 110
原创 洛谷 P1983 车站分级
题目:车站分级思路:根据每条线路,把经过的不停的站向停的站连边。然后跑一遍拓扑排序就好了。代码:#include<bits/stdc++.h>using namespace std;#define maxn 1000#define read(x) scanf("%d",&x)int n,m;int s[maxn+5],t[maxn+5][maxn+5];...
2018-12-24 21:08:44 115
原创 洛谷 P1268 树的重量
题目:树的重量思路:树上点k到直线(i,j)距离 = ( - d(i,j) + d(i,k) + d(j,k) ) / 2代码:#include<bits/stdc++.h>using namespace std;#define maxn 30#define read(x) scanf("%d",&x)int n;int d[maxn+5][maxn+5]...
2018-12-24 16:49:00 144
原创 Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) D Minimum Diameter Tree
题目:Minimum Diameter Tree思路:可以把s尽量平均的分配给叶子节点所连的边,直径就是这个平局值*2。给出两组也许有用的数据:Input:2 21 2Output:2Input:12 10001 21 31 41 51 61 77 87 99 109 119 12Output:222.22222222222代码:#...
2018-12-24 13:19:46 113
原创 Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C Connect Three
题目:Connect Three思路:模拟。可以先把ABC三点按照横坐标排序,然后在A和B之间连一条先向左后向上的路,同理在B和C之间连一条先向下后向右的路。最后统计一下。我们假设横着的那一段距离是一定要走的,要尽可能的省下竖着的那一段距离的花费,就让两条路线竖着的部分尽可能的重合。所以我们把这一段都安排在B点那一列就好了。代码:#include<bits/stdc++.h&...
2018-12-24 13:11:59 216 1
原创 Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) B Div Times Mod
题目:Div Times Mod思路:枚举一个数i ∈ [1,n) 使得 n / i ==0 ,表示 x mod k == i,且x / k == n / i 。然后 x 可以算出来,即 x=( n / i ) * k + i 。输出x的最小值就好 。代码:#include<bits/stdc++.h>using namespace std;#define re...
2018-12-24 13:07:32 174 1
原创 Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) A Right-Left Cipher
题目:Right-Left Cipher思路:直接模拟就可以了。代码:#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;#define read(x) scanf(&quot;%d&quot;,&amp;amp;x)#define maxn 100char a[maxn+5];int main() { scanf(&quot;
2018-12-24 13:01:26 99
原创 字符串总结?
其实就是模板汇总好伐1、字符串hash可以解决一切字符串问题。复杂度成迷。#include&lt;bits/stdc++.h&gt;using namespace std;#define maxn 10000#define read(x) scanf("%d",&amp;x)#define maxm 1500#define ull unsigned long long#de...
2018-12-23 16:48:09 135
原创 CF1093C Mishka and the Last Exam
题目:Mishka and the Last Exam思路:其实,这就是个贪心…把a[i]尽量取小,a[n-i+1]取大就好了。代码:#include<bits/stdc++.h>using namespace std;#define read(t) scanf("%d",&t)#define readll(t) scanf("%lld",&t)#d...
2018-12-21 21:42:57 206
原创 CF1093B Letters Rearranging
题目: Letters Rearranging思路:sort一下就好了。代码:#include<bits/stdc++.h>using namespace std;#define read(t) scanf("%d",&t)#define maxn 1000char a[maxn+5];int main() { int t; read(t); whi...
2018-12-21 21:19:39 242
原创 CF1093A Dice Rolling
题目:Dice Rolling思路:直接输出 x/7 + (x/7!=0)代码:#include<bits/stdc++.h>using namespace std;#define read(t) scanf("%d",&t)int main() { int t; read(t); while(t--) { int x; read(x); in...
2018-12-21 21:04:56 231
原创 洛谷 P2146 [NOI2015]软件包管理器
题目:软件包管理器思路:树剖模板题。代码:#include<bits/stdc++.h>using namespace std;#define maxn 100000#define read(x) scanf("%d",&x)int n;struct Node{ int lstid; int fa,hson; int sz,d,tp;};Nod...
2018-12-20 16:15:03 142
原创 洛谷 P1099 树网的核
题目:树网的核思路:floyd求多点最短路。枚举路径端点,暴力的算每个点到路径的距离。一个点k到路径(i,j)的距离为:(d[i][k]+d[j][k]-d[i][j])/2代码:#include<bits/stdc++.h>using namespace std;#define maxn 300#define read(x) scanf("%d",&x)...
2018-12-20 13:43:49 147
原创 洛谷 P3178 [HAOI2015]树上操作
题目:树上操作思路:树剖模板题。代码:#include<bits/stdc++.h>using namespace std;#define read(x) scanf("%lld",&x)#define maxn 100000#define ll long longstruct Node { ll lstid; ll w,fa; ll sz,d,hso...
2018-12-20 12:54:09 163
原创 【模板·树剖】 洛谷 P3384 【模板】树链剖分
题目:树链剖分注意:线段树区间处理时左右区间不要颠倒。代码:#include<bits/stdc++.h>using namespace std;#define read(x) scanf("%d",&x)#define maxn 100000#define ll long longstruct Node { int lstid; int w,fa; ...
2018-12-19 23:40:52 147
原创 洛谷 P4005 小Y和地铁
样例解释简单的想法只和0号线有1个交点的线路可以不用考虑,因为可以把它的长度看做无限短。如果有一条线路左右端点间没有另外一条线的端点,那么这条线可以直接删除。这样操作至没有可以删除的线为止。这样子样例3就可以不用考虑任何的线路直接输出0了……一条线和0号线的位置关系dfs。枚举每条线和0号线的位置关系+暴力找交点。时间复杂度O(
2018-12-19 16:26:54 408
原创 Codeforces Round #527 (Div. 3) CF1092C Prefixes and Suffixes
题目:Prefixes and Suffixes思路:可以知道原序列一定是由给出的最长的两个字符串拼接而成的,所以可以尝试把最长的两个字符串按两种相对位置拼接。设一个数组b。对于每种拼接方法——如果一个串可以放在前缀的位置而不能放在后缀的位置,就把b[i]设为1。如果一个串可以放在后缀的位置而不能放在前缀的位置,就把b[i]设为2。如果一个串可以放在前缀的位置也可以放在后缀的位置,...
2018-12-19 16:06:19 320
原创 Codeforces Round #527 (Div. 3) CF1092B Teams Forming
题目:Teams Forming思路:贪心就好了,把长度最相近的两根配对一定是最优的。代码:#include<bits/stdc++.h>using namespace std;#define read(x) scanf("%d",&x)#define maxn 100int n;int a[maxn+5];int main() { read(n);...
2018-12-19 13:51:01 262
原创 Codeforces Round #527 (Div. 3) CF1092A Uniform String
题目:Uniform String思路:每次输出的形式都形如 abcdabcdabc 这样的,k个字母循环输出。只需要写一个循环维护一下就好了。代码:#include<bits/stdc++.h>using namespace std;#define read(x) scanf("%d",&x)int n;int main() { read(n);...
2018-12-19 13:49:31 265
原创 【模板·点分治】 洛谷 P3806 【模板】点分治1
题目:点分治代码:#include<bits/stdc++.h>using namespace std;#define maxn 10000#define maxk 10000000#define read(x) scanf("%d",&x)struct Edge{ int y,z; Edge(){} Edge(int yy,int zz) {y=yy,...
2018-12-18 21:40:54 131
原创 【模板·树的重心】 codevs 3639 树的中心
题目:树的中心树的重心找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。所以dfs下就好了。代码:#include<bits/stdc++.h>using namespace std;#define maxn 16000#define inf (1e9)#define read(x) scanf("%...
2018-12-18 16:23:21 158
原创 【模板·后缀数组/sa】洛谷 P3809 【模板】后缀排序
题目:后缀排序代码:#include<bits/stdc++.h>using namespace std;#define maxn 1000000int n,m;char a[maxn+5];int sa[maxn+5],rk[maxn+5];int tax[maxn+5],tp[maxn+5];void readin() { scanf("%s",a+1)...
2018-12-18 13:34:36 187
原创 Avito Cool Challenge 2018 B. Farewell Party ( CF 1081B )
题目:Farewell Party代码:#include<bits/stdc++.h>using namespace std;#define read(x) scanf("%d",&x)#define maxn 100000int n;vector<int> a[maxn+5];int col[maxn+5],cnt;int main() ...
2018-12-17 16:38:08 266
原创 Avito Cool Challenge 2018 D. Maximum Distance (CF 1081D)
题目:Maximum Distance题意:给一张图,定义一条路径的长度为这条路径上的边权最大的边的边权。定义两点间距离为这两点间路径的最小长度。给出k个特殊节点,求对于每个特殊节点,距离它最远的点到它的距离。思路:可以知道,这个距离一定出现在最小生成树上。所以先跑一遍kruskal,然后取第一个特殊节点dfs求出每个特殊节点到它的距离d[i],所有节点的最远距离都是 max (...
2018-12-17 13:44:31 320
原创 Avito Cool Challenge 2018 C. Colorful Bricks ( CF1081C )
题目:Colorful Bricks题意:给出3个整数 n , m , k 。分别代表有n块砖,有m种颜色,其中有k块砖和自己左边的砖颜色不一样。问有几种染色方案。思路:dp。令f[i][k]表示前i块砖,有k块和左边的不一样的方案数。边界:f[1][0]=m。转移方程:f[i][k]=(f[i-1][k]+(k==0?0:f[i-1][k-1])*(m-1))%md;代码...
2018-12-17 13:29:26 208
原创 Avito Cool Challenge 2018 A. Definite Game(CF1081A)
题目:Definite Game题意:给出一个正整数n,可以多次操作,每次操作可以把n减去一个和n互质的数。问n的最小可能值。思路:大于2的数都直接输出1就好,因为可以直接减去n-1,n-1和n一定是互质的。2的话输出2,1输出1。代码:#include<bits/stdc++.h>using namespace std;#define read(x) sc...
2018-12-17 13:07:14 205
原创 洛谷 P4346 [CERC2015]ASCII Addition
题目:ASCII Addition思路:卡读入毒瘤题膜个你。代码:#include<bits/stdc++.h>using namespace std;string a[10];int d[2],e[20];int cnt;void init() { a[0]="xxxxxx...xx...xx...xx...xx...xxxxxx"; a[1]="....
2018-12-16 21:54:27 180
原创 CF1070J Streets and Avenues in Berhattan
题目:Streets and Avenues in Berhattan思路:指把一种颜色分开一定是最优的。代码:#include<bits/stdc++.h>using namespace std;#define read(x) scanf("%d",&x)#define maxn 30000#define maxk 200000int n,m,K;int...
2018-12-12 17:02:50 263
原创 CF833B The Bakery
题目:The Bakerykevin_yu的题解之前没有好好听@kevin_yu讲题,做了一晚上……这篇题解主要是对kevin_yu的补充以及代码注释的扩充。思路:part 1.dp一个很容易想到的O(n2k)O(n^2k)O(n2k)算法——令f[i][j]f[i][j]f[i][j]表示前i的位置划分j次的价值。转移方程:f[i][j]=max (f[k][j−1...
2018-12-11 23:52:26 335
原创 洛谷 P1640 [SCOI2010]连续攻击游戏
题目:连续攻击游戏思路:二分图匹配问题。代码:#include<bits/stdc++.h>using namespace std;#define maxn 1000000#define maxm 10000#define read(x) scanf("%d",&x)int n;vector<int> a[maxn+5];int use[ma...
2018-12-11 20:36:04 178
原创 洛谷 P2216 [HAOI2007]理想的正方形
题目:理想的正方形思路:单调队列。代码:#include<bits/stdc++.h>using namespace std;#define maxn 1000#define maxk 100#define read(x) scanf("%d",&x)struct Pair { int x,y; Pair(){} Pair(int xx,int yy)...
2018-12-11 15:21:36 245
原创 洛谷 P2051 [AHOI2009]中国象棋
题目:中国象棋思路:首先是30分暴力——直接dfs就好。用row[]和col[]存储状态。#include<bits/stdc++.h>using namespace std;#define maxn 100#define read(x) scanf("%d",&x)#define md 9999973int n,m;int rw[maxn+5],co...
2018-12-10 23:36:54 214
空空如也
关于splay的分裂与合并问题
2018-08-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人