自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 poj 3268

有向图,每个点到终点,然后从不同的路径回来。最短路跑一次是源点到各个点的距离,把边反向再跑一次,就是各个点到源点的距离,两者相加取最大值即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>using n...

2019-10-10 20:24:23 193

原创 poj 1797

和poj2253差不多,都是要边权最大值最小#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<cmath>#include<cstring>using namespace std;#define f firs...

2019-10-10 20:09:19 167

原创 poj 2253

给一个n个节点的无向完全图。一个路径的距离是路径中权值最大的边要求1到2的最短路径普通floyd d[i][j] = min(d[i][j],d[i][k]+d[k][j])而此题中d[i][j]显然是d[i][k]和d[k][j]两者较大的取小即可#include<iostream>#include<cstdio>#include<algorithm&...

2019-10-10 19:51:14 217

原创 poj 2387

无向图,n到1,最短路 spfa,模板题#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queue>using namespace std;#define f first#define s secondtyped...

2019-10-10 19:34:41 191

原创 Codeforces 1223C

题意比较难以描述,故略;考虑到用k个如果成立,那么k+1觉得成立。因而可以想到二分。考虑贡献时,先上a,b的lcm,在上max(a,b),最后上min(a,b)两个2e5数的lcm有可能爆int,需要注意。#include<bits/stdc++.h>using namespace std;#define f first#define s secondtypedef lo...

2019-10-08 19:43:21 192

原创 Codeforces 1234E

给m个数,每个数在1-n之间,有n个排列,求n次排列中,这m个数的相邻两个数之间的位置的绝对值之差。可以发现,对于第i个排列,其实就是把i 和 i+1 换个位置而已,所以如果有两个相邻的数,不是i,也不是i+1的话,那么这两个数第i次变化的对答案的贡献就是0所以只需要考虑和i,以及i+1相邻的那些数即可#include<bits/stdc++.h>using namespace...

2019-10-03 15:08:39 346

原创 Codeforces 1228D

一个无向简单图,问是否能把图分成三个点集,使得每个点集内部的点没有边相连,点集之间所有点都要两两相连。好像3-sat啊由于如果存在的话,那么一个点和它相连的点都不在同一个点集中。所以先假设存在,把点染成1、2、3三种颜色之一,然后判断是否成立即可。必须有三种颜色同一个点集中不能有边点集A和点集B之间的边的个数必须要是size(A) * size(B)#include<bits/s...

2019-10-02 15:57:08 277

原创 Codeforces 1213G

一个有向图,每条边都有一个权值,有m个询问,每个询问找出有多少对点使得这些点对之间的最大边权不大于q直接建图搞不好做,也许是我不会吧考虑要查询的值为x,当前有一条边,其权值为x-1,连接的两个连通分量大小为sz1和sz2,那么很显然这条边的贡献就是sz1*sz2而权值小的边一直都对更大的查询有贡献。从而想到,可以讲边和查询排序,然后用并查集维护连通分量的大小。#include<bi...

2019-09-26 17:05:00 239

原创 hdu 4612

有一个无向图,问加一条边以后最少还有多少个桥。就是求多少可以消除多少个桥,可知答案就是缩点以后树的直径。求树的直径用dfs TLE, bfs就AC了,学到了。#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <queue&g...

2019-09-26 16:46:00 101

原创 Codeforces 1217D

一个有向图,把边染色后使得相同颜色的边无法构成环,求最大颜色数。原图若没有环,则答案为1,否则答案为2,只要一个环中的边染不同颜色即可。问题就是如何高效的使环中的边染不同颜色,考虑到是有向图,如果有环,则肯定有a - > b , b -> c , c -> a 类似的情形,因此只要判断边的两个端点大小即可,u > v 染1u < v 染2这样环中必定有不同的颜...

2019-09-26 16:10:33 243

原创 Codeforces 1209D

有k人,每个人都想得到n中物品中的两件,如果一个人一件都没有得到,那么就会不高兴,求不高兴的人数。把物品看成点,人看成边,如果一个点被访问过,那么一定有一个人被满足了如果一个连通分量有m个点,无论有多少条边,只能最多有m-1条边是第一次访问这些点的,也就是只有m-1个人能被满足,所有人数减去被满足的人数即答案#include<bits/stdc++.h>using namesp...

2019-09-26 15:10:01 201

原创 poj 3177

一个无向图,加多少跳边使得整个图是边双连通。缩点以后找度为1点节点,用边将其两两相连即可。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define f first#define s secondt...

2019-09-26 13:56:59 194 1

原创 poj 1236

给一个联通有向图,求两个值。1.从多少个点出发能遍历所有的点2.加多少条边使得整个图是强联通的。缩点以后可知问题1的解就是图中入度为0的点的个数,对于问题2,答案为max(num(ind=0),num(outd=0),可以把入度和出度为0的点对应连起来,然后如果入度为0>出度为0,就从已经和出度为0连过的入度为0的点加一条边即可。反之亦然。#include<iostream&g...

2019-09-26 10:53:24 188

原创 Codeforces 1147C

n堆(n是偶数)石子,两个人每次要在n/2堆石子中每堆至少取一个,不能取为失败。设x为当前n堆石子的最小值当cnt[x] <= n/2时,该局势是必胜局势,否则是必败局势若cnt[x] <= n/2 ,可以选n/2个大于x的石子堆,并且把他们减少到x,得到必败局势若cnt[x] > n/2 ,首先,如果x 为 0 ,那么选不了 n/2 堆了,当x 不为 0 ,那么选n...

2019-07-24 11:22:49 231

原创 Codeforces 1190B

有n堆石子,两个人轮流,每次只能拿一个,不能拿了或者拿完后有两堆石子的数量相同(可能两堆都是0)的话会输开局有几种情况第一个人是一定会输的即cnt[0] >= 2cnt[x] >= 3amt(cnt[x]) > 1cnt[x] = 2 && cnt[x-1] >= 1由于要避免产生两堆相同的石子,故如果当前局势未结束的话必定先拿相对小的,使其更小...

2019-07-24 10:35:13 215

原创 ubuntu python记录

Matplotlib后端是 Agg 的问题import matplotlibmatplotlib.use('TkAgg')没有tk包的问题在terminal中sudo apt-get install python3-tk

2019-07-16 15:05:57 167

原创 Octave一些操作

help xxxA为矩阵octave 中index从1开始基本codeValue%注释PS1(’>> ')将标记符换为>>[ ; ; ]创建矩阵A = a : dif : b创建一个1 X (b - a) / dif的矩阵A = a : b创建一个1 X (b - a) 的矩阵A’A的转置矩阵w...

2019-07-15 19:59:55 562

原创 hdu 1525

简单博弈对于一个状态,要么是必胜,要么必败对于(a,b) ,a > b来说若 a % b == 0 直接转化为(b,0),结束若 a / b > 1 , 设 a = q * b + r , q > 1 , 0 < r < b,则 可以转化为(b + r , b ) 或 ( b , r )注意(b + r , b ) 也可以转化到 (b , r) ,考虑状态...

2019-07-15 15:40:46 119

原创 Codeforces 1194D

简单博弈给你个数n,每次能减去1,2,或者k,两个人轮流,轮到谁那个数是0的时候谁输。先打表,发现k不是3的倍数的时候数字是循环的,循环节是3k是3的倍数时循环节是(k+1) 再讨论一下即可/************************************************************************* > File Name: 1194D.cpp...

2019-07-15 11:46:29 480

原创 deepin那些事

原地址

2019-06-23 20:45:03 190

原创 Codeforces 1155D

给一个序列,可以将一个连续子序列的每个值都乘x,问这样操作以后能得到的最大连续子序列的值是多少.dp可搞,dp[i][0]表示到i时没有使用乘x操作能获得的最大连续子序列的值dp[i][0] = max(a[i],dp[i-1][0] + a[i])dp[i][1]表示到i时正处在在乘x的操作中能获得的最大连续子序列的值则dp[i][1] = max(dp[i][1],max(dp[i-1...

2019-05-08 19:13:03 171

原创 hdu 6153

给两个串s1,s2求s2所有的后缀的长度乘其在s1中出现的次数之和。按照题意去枚举s2的后缀铁定是行不通的,对于一个后缀i,当s1中有一个后缀j的前缀i和其相等时,才会加1,而且与此同时,后缀i+1,i+1,…n-1的次数都会加1考虑用exgcd解决可知匹配串t和模式串s,next[i]表示s[i,len-1]与s[0,len-1]的最长公共前缀,extend[i]表示t[i,len2]与s...

2019-05-05 17:09:21 243

原创 hdu 4763

求一个最长的字串s,原串中有sasbs的形式。枚举是会TLE滴,所以要预处理一下原来的串,can[i]表示能否构成长度为i的字串的一前一后的形式,这用next数组即可求得,然后枚举中间的点判断能否满足三段式的结构#include <cstdio>#include <cstring>#include <algorithm> const int N = ...

2019-05-04 22:35:26 158

原创 hdu 2594

给两个串a和b,求a的前缀和b的后缀最长的部分把a,b拼接起来,这正是KMP中next数组的含义。但是这题还有个坑,如a是cdc,b是d,答案是0,而直接输出next[len]是2,原因就是拼接时,会有一部分会构成循环,所以长度一定不大于min(a.len,b.len)利用next数组的特性,可以倍增求出最小的next值#include <cstdio>#include &l...

2019-05-02 13:28:44 179

原创 Lightoj 1258

给一个字符串,只能再右边加字符,问构成回文串最少要多少个字符。可以知道,只有当回文串的右边延伸到最右端才可能构成一组解然后利用mp[i] - 1 的含义是回文半径,并且最左右段都是原数组的字符。判断一下即可#include <cstdio>#include <algorithm>#include <cstring>#include <iost...

2019-04-29 20:25:51 179

原创 hdu 3294

先把字符串转换一下,然后求mp[]。加了其他字符后,2k ,k = 1,2,…的位置实际上是原来的k/2-1的字符。所以求得最长半径r和对应位置pos后,对应的原数组下标就是[(pos-r+1)/2 -1,(pos+r-1)/2-1],一边加一边减是因为加入新字符后回文字串的最外层一定是特殊字符#include <cstdio>#include <cstring>...

2019-04-29 19:40:28 228

原创 hdu 4516

给你个“串”,让你找最长回文字串,其中回文字串要像是山峰的形状。为了不影响原来的串,要加比较大的数字。计算mp时要注意两边的小,中间的大,由于添了其他的数字,所以间隔是2#include <cstdio>#include <algorithm>#include <cstring> using namespace std; int t,n,a[1...

2019-04-29 19:33:26 106

原创 poj 3974

找一个字符串的最长回文字。manacher模板题manacher就是往原字符串里面加别的字符,使得得到的串是偶数的,然后求mp数组,mp[i]表示以i为中点的最长回文长度#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int ma...

2019-04-28 21:39:18 249

原创 poj 1182,poj 1703,hdu 1829

这一类的题目都是n个东西属于不同的集合,集合中的情况要么同时发生,要么同时不发生。poj 1182 是书上的题目,有详解poj 1703 和 hdu 1829 都是只有两个集合poj 1703#include <cstdio>const int N = 1e5 * 2 + 10;char s[2];int n,m,x,y,fa[N],t;int find(int x)...

2019-04-26 16:11:45 149

原创 poj 1988

一开始有n个木块在一行,有两种操作,第一种是把m所在的那一堆放到n所在的那一堆上面,第二种是查询木块m下面有多少个木块。用并查集,将最底下的木块记录为根,则一个木块到最底下的距离就是该木块到根的距离。如果连通分量a有2个木块,b有3个木块,则a的根到b的根的距离就是3,可知距离和当前连通分量的大小是有关的,因此要用一个数组记录。查询时,有可能当前的根节点没更新过,所以要先更新路径并查集的深...

2019-04-26 15:06:30 317

原创 poj 2182

有一个1-n的序列,第i个数知道在它前面且比它小的数的个数,求该序列。线段树,点修改,点查询。更细致一点,是权值线段树,查区间第k大#include <cstdio>const int N = 8000 + 10;int n,sumv[N<<2],a[N],ans[N];void build(int rt,int L,int R){ if(L == R) ...

2019-04-23 20:25:45 458

原创 Codeforces 1151C

模拟题就老老实实模拟好了,别老想着骚操作,结果就是越搞越复杂。奇数和偶数按2^0,2^1,…的长度交错,且从小到大,做法就是分别计算一个数之前有多少个奇数,多少个偶数,然后求和答案就出来了。然后就老老实实模拟吧由于有减,所以要先加再取模#include<bits/stdc++.h>using namespace std;#define forn(i,n) for(int i...

2019-04-22 00:19:26 325

原创 hdu 2795

一个h*w 的竖直平面,有n个间物品,每个物品是1*wi,要尽量往上放,问应该放在哪。线段树真是奇妙~主要是题目规定了必须要尽量往上放,不然就是个贪心了~区间的含义是[l,r]行中可以放的位置最大的空间,那就是点修改,点查询了#include <cstdio>#include <algorithm>#include <cstring>using ...

2019-04-21 21:51:15 124

原创 Codeforces 1151D

有n个人,第i个人站在位置j的情况下会产生一个值ai * (j-1) + bi (n-j ),j = 1,2,…,n,问怎样安排使得n个值之和最小。将式子变形,得 (ai - bi) * j + bi * n - ai ;可知每个人都会产生一个值 为 bi * n - ai,该值与这个人所要站得位置无关。而 ai bi 是已知的,问题就转变为一个非常熟悉的贪心问题了#include<...

2019-04-19 17:09:11 522

原创 Codefoces 1151B

想太多,结果fst了 呜呜呜在一个 N * M 的矩阵里面每行选一个数,使得选出来的这n个数的异或值大于0 .直接枚举就好了#include <bits/stdc++.h>using namespace std;const int N = 550;int n,m;int a[N][N];int main(){ ios::sync_with_stdio(false)...

2019-04-19 17:03:09 142

原创 poj 3254

给一个0 1的矩阵,1的位置可以选,相邻的1不能都选,问最后有多少种选法。状压dp在一行种可知状态i 只有相邻的不是相同才是合法的状态,即 i & (i << 1) = 0 可以事先记录下哪些是合法的。先处理第一行,然后逐行统计,要注意状态 i 在一行种合法的条件还有改行的 集合是 i 的子集,即i ^ row | row = i ,也就是row 中的1 i都有。#i...

2019-04-17 23:51:19 197

原创 hdu 1074

有n个作业,做一门作业会花费一定的时间,每门作业有一个期限,过了期限每天就会扣分,问该怎样安排写作业的顺序,使得扣分最小。状态压缩dpdp[i] 表示 完成i所对应的集合的作业的最小花费,一开始初始化为INF, dp[i] = min(dp[i-{j} + cost),其中cost表示完成了i包含的作业后完成j的花费。由于要输出路径,所以要记录每个状态的上一个状态,最后反向打印#inclu...

2019-04-17 23:44:17 115

原创 Codeforces 1092F

给一棵树,对于每一个节点u,有一个值 sum(dist(u,v)*val[v] ) ,v是其他节点,求最大的值。树形dp如果v 是 u 的孩子节点, 则以v为根节点的子树对u 的贡献就是子树中所有节点的和。先求出以u为根节点的子树的权值和。可以一边dfs一边算答案,当由u 转移到 v 时 ,当前的值 要减去 sum[v] ,再加上 sum[u] - sum[v] ,上面两步好想,关键是算v...

2019-04-16 20:29:57 178

原创 Codeforces 1083A

给一棵树,每个节点、每条边都有权值,到一个会加上对应的权值,经过一条边会减去边上的权值,问从节点出发,最多能剩下多少权值。树形dp,对于一个节点u,不可能又算它的父亲节点,又算它的两个两个(或以上)的儿子,原因是路径无法重复走。dp[u]表示u到它的一个叶子节点的最大剩余的权值。dp[u] = max(val[u] + dp[v] - cost(u,v)) v是u的孩子更新答案时,首先要判...

2019-04-16 19:59:08 420

原创 Codeforces 1153C

给一个由(、)、?组成的序列,?可以变成(、)中的一种,问能否将原序列转换为一个任意前缀都非法的合法序列。要使得当前的序列非法,可以尽可能多的加一种括号,最后又要合法,那么要尽可能加(先排除一些特殊情况。考虑到整个序列是合法的,则( 的数量和 )的数量都是n/2,可以贪心构造,如果已经确定的(的数量小于 n/2,且当前的字符是?,则?要变成(。#include <bits/stdc++...

2019-04-15 17:17:23 382

空空如也

空空如也

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

TA关注的人

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