- 博客(29)
- 资源 (1)
- 收藏
- 关注
原创 Codeforces Round #666 (Div. 2)D经典博弈(贪心)
D. Stoned Game题意:有n堆石头,两个人轮流拿一个石头。后手不能拿刚刚先手抓的堆.问:最后谁赢。思路1:可以先考虑,假如有一堆的总数>其它的堆的总数.那么先手可以一直抓这一堆,把对手磨死(贪心,抓大堆)。那么假如一般情况,也是贪心抓大堆,log维护一下。思路2:可以先考虑,假如有一堆的总数>其它的堆的总数.那么先手可以一直抓这一堆,把对手磨死(贪心,抓大堆)。sum为偶数,肯定后手赢。反之,先手赢。(菜鸡不会证明)AC1#include <ios
2020-08-31 23:48:24 112
原创 Codeforces Round #608 (Div. 2)(ABCD题解)全是暴力,D是dp和贪心
A. Suits(枚举,老套路了)题意:有四种商品,分别由a,b,c,d个。现在由两种选择。选a和d,盈利是e。选b,c和d,盈利是f问:怎样分配商品可以赚最多。思路:枚举(老套路了)AC(强烈推荐学习枚举,老套路了)#include <iostream>using namespace std;int main(){ int a,b,c,d,e,f; cin>>a>>b>>c>>d>>e&
2020-08-31 23:00:18 87
原创 Codeforces Round #666 (Div. 2)(ABCD题解),E看情况再补
A. Juggling Letters题意:给你n个串,可以进行一种操作。把一个字母移到任意地方。问:最后是否可以使所有n个串都相同。思路:统计字母就可。(老套路了)AC在这里插入代码片B. Power Sequence题意:给你一个数组,进行最小的操作,使得它变成一个等比数列(q>=1)一次操作是+1/-1思路:当n很小时,q(公比)可能的情况很多。相反,当n很大时(假如1e5,上届),q只可能为1.所以两层循环暴力是可以的。反思:本题fst在了界限分析。
2020-08-31 16:22:52 145
原创 AtCoder Beginner Contest 177(ABCDE题解),这次E码歪了,4wa.
A - Don’t be late(转换为乘法)题意:问是否能在时间TTT内,到达终点,距离为DDD,速度为SSS.思路:简单的数学问题。在时间TTT内所能达到的最大距离d=Td=Td=T x SSS如果d>=Dd>=Dd>=D那么肯定可以按时到达。(转换为乘法,当然啦除法也行,不过有浮点误差)AC#include <iostream>using namespace std;int main(){ int d,t,s; cin>>
2020-08-30 17:01:06 108
原创 Educational Codeforces Round 94 (Rated for Div. 2)ABC题解
A. String Similarity题意:要求你构造一个串w。思路:对于这些字串,要满足相似,那么就保证每一个子串都至少有一个位置相似即可。那么w【1】=s【1+0】.(保证[1,n][1,n][1,n])w【2】=s【2+1】.(保证[2,n+1][2,n+1][2,n+1])w【3】=s【3+2】.(保证[3,n+2][3,n+2][3,n+2])w【n】=s【n+n-1】.(保证[n,2n−1][n,2n-1][n,2n−1])AC#include <iostream
2020-08-26 01:51:23 111
原创 AtCoder Beginner Contest 176-E - Bomber(套路题)
E - Bomber题意:给你m个坐标,每个坐标有一个target。现在可以消灭一行和一列。问最多消灭多少target?思路:枚举最大行(有num1行),和最大列(有num2行),之后就是配对即可。行列配对的总情况是num1 x num2.之后统计一下所有的m个点,有多少个是交点即可。(cnt)最后假如所有cnt=num1 x num2,那么就是所有可能的点是交点,那么答案就是maxr+maxc-1.否则就是maxr+maxc。反思:与一场gym的一题有异曲同工之妙Cockro
2020-08-24 10:40:29 255
原创 AtCoder Beginner Contest 176(ABCDE)D题撒币了,int写成bool
A - Takoyaki题意:给你n,x,t。其中做x个小吃的时间为t。每次制作都要时间t。思路:就是向上取整就好。AC#include <iostream>using namespace std;int main(){ int n,x,t; cin>>n>>x>>t; int num=(n+x-1)/x; cout<<num*t<<endl; return 0;}B -
2020-08-22 22:19:27 131
原创 Codeforces Round #665 (Div. 2) (ABC题解)
A. Distance and Axis题意:给定你A的位置,每次都可以改变A的位置一个单位。问:最少改变多少次,可以使得。∣∣OB∣−∣AB∣∣=k||OB|-|AB||=k∣∣OB∣−∣AB∣∣=k思路:根据样例可以猜到。当n的值小于k时,那么只要把n加到k。那么就可以把B放在原点或A上。此时操作0步那么剩下就是n大于等于k时。显然,当相等时,不用操作,就和情况1相同。不等就是n大于k时,细心发现只要n和k同奇偶性,那么操作0步。AC(赛后)#include &l
2020-08-22 01:54:35 73
原创 Educational Codeforces Round 93 (Rated for Div. 2) (ABCD)
A. Bad Triangle题意:给你一个升序序列。问:是否存在一组triple(三元组),不能成为三角形。思路:取最小的两条边,和最大的。a【1】+a【2】<=a【n】时,满足条件。AC#include <iostream>using namespace std;const int maxn=5e4+10;int a[maxn];int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
2020-08-15 12:18:41 83
原创 计蒜客 207传球游戏(喝水dp)
计蒜客 207传球游戏题意:就是普通的传球。思路:类似走阶梯。fib的变式。AC#include <iostream>using namespace std;int dp[40][40];int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int n,m;cin>>n>>m; dp[1][0]=1; for(int i=1; i<=m; i+
2020-08-14 18:38:50 70
原创 LibreOJ 6163合并回文子串(二维区间dp)
合并回文子串题意:给你两个字符串a和b。∣c∣=∣a∣+∣b∣|c|=|a|+|b|∣c∣=∣a∣+∣b∣之后再拼成字符串c。(a字符串内的相对顺序不变,b同样)求c最大的回文子串思路:传送门这里做个dp时的补充。当长度为0时,那么区间不存在,dp时把和区间不存在的标记为1.(只有【a+1,a】时,才赋值1。其他都赋值0.)利用好上面那个条件,可以少写好多状态。AC#include <iostream>#include <cstdio>#includ
2020-08-14 17:14:50 106 1
原创 专题十 匹配问题 POJ 2289 Jamie‘s Contact Groups(二分答案+二分图多重匹配)
POJ 2289 Jamie’s Contact Groups题意:有一个通讯录,要求你把每个好友分组。有m个组 [0,m)[0,m)[0,m)每个好友的所能去的组有限制。使得每个好友都能分到一个组。求min(所有组中largest的人数)min(所有组中largest的人数)min(所有组中largest的人数)思路:最小值中的最大值。(很裸的二分)之后匹配,就是二分图多重匹配。反思:sstream的初始化。 stringstream ss; ss.str("")
2020-08-13 23:06:11 530
原创 专题十 匹配问题 POJ 2594 Treasure Exploration -----DAG最小相交路径覆盖(DAG二分图最大匹配+floyd传递闭包)
POJ 2594 Treasure Exploration题意:在一个DAG(有向无环图)里,求最小路径数点覆盖。(线路可以相交)反思:最小路径覆盖数=n−maxmatch最小路径覆盖数=n-maxmatch最小路径覆盖数=n−maxmatch相关证明1:传送门相关证明2:传送门思路1:先跑一遍floyd传递闭包。之后跑最大匹配。AC1#include <iostream>#include <cstring>#include <algorit
2020-08-13 16:05:17 132
原创 专题十 匹配问题 HDU 1054 Strategic Game(最小顶点覆盖or树形dp)
HDU 1054 Strategic Game题意:给你一个图,要求你放最少的点。使得这些点,都可以看到所有的边。思路1:最小顶点覆盖,即最大匹配AC1#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#define mst(x,a) memset(x,a,sizeof(x))#define fzhead EDGE(int _to, in
2020-08-11 17:25:54 117
原创 专题10 匹配问题 POJ 3020 Antenna Placement(二分图最大匹配)
POJ 3020 Antenna Placement题意:给你一个图,里面的 * 表示 站点,要求把它们都连接起来,问最少所需要的antennas(电线)。一个antennas可以连接两个基站,要相邻。(特别地,也可以连一个空点)每个基站至少需要1个antenna。思路:建立无向图(先对于每个基站连边)。跑一遍最大匹配。之后可能还有一些没匹配到的点。那么这些每匹配的点,就ans++。(管他连到哪里,直接加一条antenna,即ans++)AC#include <iostr
2020-08-11 14:05:32 78
原创 2020牛客暑期多校训练营(第十场)A-E(今天签到了去,菜了菜了)
A----Permutation题意:给你一个范围,【1,p-1】。要求你构造一个排列,使得(xi+1x_{i+1}xi+1 %p)= (2xix_{i}xi%p)或者(xi+1x_{i+1}xi+1 %p)= (3xix_{i}xi%p)思路:暴力构造即可以了。第一个放1,假如2xix_{i}xi没用过,那么2xix_{i}xi可以。假如2xix_{i}xi用过,那么看3xix_{i}xi.同理。找不到,就输出-1.是否用过vis以下就可以了。AC#incl
2020-08-10 18:41:41 92
原创 [kuangbin带你飞]专题十 匹配问题 HDU-1038
Courses HDU - 1083题意:有p个课程,n个学生。问:是否存在一种匹配,使得每个课程都要有学生。(且不能有多余的学生)。思路:二分最大匹配。从课程出发去匹配学生反思:初始化别乱用。(mst就mst,其他算了ε=ε=ε=( ̄▽ ̄)) mst(head,-1);mst(vis,0);// for(int i=0; i<=p*n; i++)head[i]=-1,vis[i]=0;之所以wa是因为1*1的情况。对于题目求什么,那就从什么出发二分最大匹配
2020-08-07 23:53:54 111 1
原创 HDU 6638二维扫描线+二维最大子段和+离线
Snowy Smile HDU - 6638题解看这位大佬,讲的很详细了。传送门反思:本题做的时候,已经想到二维子段和了,但不知怎么维护。看了题解,原来要用线段树,之后暴力算答案。先只看纵坐标,即只看y时(即一条水平的扫描线时),那么先暴力枚举所有可能的矩形(这些矩形,只知道上下界,左右边界还是未知的)对于每一次枚举y上界时(即一条水平的扫描线时),可以看一下这条水平扫描线y上是否有点,有就加入到【1,cntx】的线段树里,根据x坐标,往区间里进行点修改(由于数据坐标有1e9,所以要先离线
2020-08-07 01:08:59 216
原创 HDU-5542(树状数组+LIS(dp))
The Battle of Chibi HDU - 5542(dp)题意:给你一个数组,要求你找到有多少组长度为m的严格递增序列思路:先是最长上升子序列。之后就是方案数。dp[i][j]dp[i][j]dp[i][j]考虑第 iii 个位置,长度为 jjj 的值。(这里已经两层for了)那么dp[i][j]=∑p=1i−1dp[p][j−1]dp[i][j]=\sum_{p=1}^{i-1}dp[p][j-1]dp[i][j]=∑p=1i−1dp[p][j−1](且a【p】
2020-08-05 21:16:24 186
原创 The 2015 China Collegiate Programming Contest(今天睡过头了,干qwq.一点才起来)
A----Secrete Master Plan HDU - 5540(签到)题意:给你两张地图,判断能否把一张旋转成另外一张。思路:三变量交换法。AC#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){ int t,kase=0;scanf("%d", &t); while(t--){
2020-08-05 21:05:26 186
原创 [kuangbin带你飞]专题十 匹配问题 HDU 4185(二分最大匹配)
HDU 4185 Oil Skimming题意:给你一个n x n的矩阵。要求找到最多的“##”(2x1)或者”#““#”(1x2)思路:证明:可以先把这个棋盘二分染色。(黑白相间的染色,就像国际象棋的棋盘)之后对于每个2 x 1的矩形,都必然含有一个黑和白的格子。这时候黑格子定义为左集合,白格子定义为右集合。求解:那么求1x2 或者 2 x 1的矩形的数目。 就是求黑格子与相邻白格的最大匹配。而对于有"#"的格子染色时可以标号,本题主要是连边。(本题邻接矩阵会爆内存),所
2020-08-05 00:35:08 121
原创 [kuangbin带你飞]专题10 匹配问题 HDU-2819(二分图最大匹配)
HDU 2819 Swap题意:给你一个n x n的01矩阵。可以行行交换,或者列列交换。问:怎样操作,可以使得矩阵的主对角线都为1.思路:先跑行列的二分图最大匹配。(可以摆棋子,且行列不冲突)跑完后就存答案了反思:跑行列的二分图最大匹配。(可以摆棋子,且行列不冲突)模板记得加used【j】=1;AC#include <iostream>#include <cstdio>#include <cstring>#include <
2020-08-04 21:12:54 92
原创 [kuangbin带你飞]专题10 匹配问题 HDU1281(二分图最大匹配)
HDU 1281 棋盘游戏题意:给你n*m的棋盘。有k个位置可以放车要求车不能互相攻击。问:怎样排放可以放最多的车。且求出重要位置。思路:对于行列,去二分匹配。之后就是求最大位置:可以删除这一条边,之后再跑一遍最大匹配。AC#include <iostream>#include <cstdio>#include <cstring>#define mst(x,a) memset(x,a,sizeof(x))using namespace
2020-08-04 20:11:11 87
原创 [kuangbin带你飞]专题10 ---POJ-3189(二分+多重匹配)
Steady Cow Assignment POJ - 3189题意:有b个牛舍,n头牛。每头牛对牛舍的喜爱程度不同。问:怎样分配可以使得牛的喜爱程度之差最小。思路:二分差值,之后枚举下界(牛舍只有20)之后建图,跑最大匹配。AC#include <iostream>#include <map>#include <string>#include <cstring>#include <cstdio>#define m
2020-08-04 16:06:01 160
原创 2020牛客暑期多校训练营(第八场)I-K(最近几天在神游qwq)
Interesting Computer Game题意:给你n组pair。每个pair只能选一个数。问:最后选完后,最多有多少个数。思路1:(并查集维护)。读入每个pair时,并起来。(并且计算这个联通块的边数和点数)对于一个x个点联通块,所有的点都取,的充分必要条件是有x条边 。反思1:对于并查集的维护,如果是联通块的特性,可以直接加减。(eg联通块的点数,联通块的边数)相反假如:是点的特性,则要向量(带权并查集)AC#include <iostream>#
2020-08-04 14:44:45 121
原创 AtCoder Beginner Contest 174 ABCDE(题解)
A - Air Conditioner题意&&思路:if (大于30就)输出yes。else 输出no。AC#include <iostream>using namespace std;int main(){ int x; cin>>x; if(x>=30)cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0;
2020-08-02 22:24:30 208
原创 [kuangbin带你飞]专题十 匹配问题-POJ-2112(二分+网络流or多重最大匹配)
Optimal Milking POJ - 2112题意:有k个机器(产奶)。c头牛。每个机器最多可以接纳m头牛。给你牛机器之间的距离。问:怎样分配可以使牛都可以喝到奶,且走最远路的牛,所走的距离最短。思路:由于牛要走最短路,所以可以先floyd预处理。可以二分答案。由于问题是多重匹配,所以,这时候有两种思路。反思:一边多重,可以跑最大匹配。两边都是,那么就跑网络流吧。大佬的笔记传送门AC1(多重匹配,只适合一个集合多重)#include <iostream&
2020-08-02 17:11:30 148
原创 Cat VS Dog HDU - 3829(最大独立集)
Cat VS Dog HDU - 3829(二分图最大匹配)题意:有n只cat,m只dog。p个children。问:每个小孩有讨厌的,和喜欢的。怎样移除dislike的,可以使最多的children开心。思路:一开始想like连dislike,但假如有两个小孩的喜好是一样的,那么就麻烦了题目求小孩,那么连小孩好了。假如小孩之间有矛盾,那么就连一条边,之后求跑一遍max_match,求最大独立集,就可以了。反思:一开始连了like和dislikewa,后来边没连好wa了。ma
2020-08-01 23:35:34 98
原创 Rain on your Parade HDU-2389 (Hopcroft-karp)
题意:有n个雨伞,有m个人。t min 后下雨。问最多有多少个人可以拿到雨伞(一把伞,只能有一个人)思路:裸的二分图最大匹配。把距离关系,转换一下,建图即可。AC#include<iostream>#include<string.h>#include<vector>#include<math.h>#include<queue>#define fzhead EDGE(int _to,int _next)#define.
2020-08-01 21:41:03 149
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人