Educational Codeforces Round 61 今早刚刚说我适合打pikmike出的EDU 然后我就挂了 A 不管 B 不管 C 这道题到快结束了才调出来 大概就是\(n^2\)枚举不选的区间 然后随便搞搞? 大体就是维护一下区间\(1\)的个数和\(2\)的个数 判断枚举的区间有没有交集 这个的答案就是并集1的个数和交集2的个数 用总的减去更新就好了 另外如果一个区间被另外一个区间完全包含 那么这个区间肯定是没用的 特判一下就好了 #include<cstdio> #incl…
A. Regular Bracket Sequence 题意:给出四种括号的数量 ((  )) ()  )( 问是否可以组成合法的序列(只能排序不能插在另外一个的中间) 思路: 条件一:一个或 n个)( 都可以组成 )()()( 这种结构 这只需要 一个((和一个))就可以合成合法的序列 条件二: (( 和))需要相等 ()本身就合法不用管 ude<bits/stdc++.h> #define FOR(i,f_start,f_end) for(int i=f_startl;i<=f_en…
A .Regular Bracket Sequence 题意:给定“((” , “()” ,  “)(”,  “))”四种,问是否可以组成合法括号匹配 思路:设四种是ABCD,B可以不用管,而C在A或者D存在时可以不考虑,然后就是A=D. #include<bits/stdc++.h> #define ll long long #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ; ll A,B,C,D,ans; i…
https://codeforces.com/contest/1132/problem/C 采用逆向思维,要求最大的覆盖,就先求出总的覆盖,然后减去删除两个人贡献最少的人 #include<iostream> #include<vector> #include<algorithm> using namespace std; vector<]; ][],con1[];//一维数组:这个人的贡献,二维数组:这两个人共同的贡献 int main(){ int n,q;…
题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打到一半,就发现想法有问题. 这道题正解就是简单的前缀和,或者DP. 我为了更加深入理解,两种方法都试了试. 前缀和版本: 由于题目给的范围是5000,明显支持N^2,于是我们枚举去掉的两个,刚好满足,那么要如何才能O(1)的得到答案? 我们其实可以这样,我们知道它的总覆盖的数目,这是非常容易求出的.…
https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同时消去,问最少需要消去多少次 题解 定义dp[l][r]为区间[l,r]剩下一个字符所需要的最小次数 dp[l][r]=min(dp[l][i]+dp[i+1][r]+x) x为消去剩下两个字符所需要的次数,假如两个字符相同需要x=-1 代码 #include<bits/stdc++.h> #de…
https://codeforces.com/contest/1132/problem/D 二分 + 线段树(弃用结构体型线段树) 题意 有n台电脑,只有一个充电器,每台电脑一开始有a[i]电量,每秒消耗b[i]电量,充电器每秒可以给一台电脑充x电,假如有一台电脑在某一秒末电量<0,则会关机,问最小的x使得在k秒内没有任何电脑关机 题解 二分答案x,线段树维护区间[1,n]最小天数,枚举k天每天单点修改天数最小的点 代码 #include<bits/stdc++.h> #define M…
https://codeforces.com/contest/1132/problem/C 枚举 + 差分前缀和 题意 有一段[1,n]的线段,有q个区间,选择其中q-2个区间,使得覆盖线段上的点最多为多少? 题解 一开始用贪心搞,搞到一半发现需要枚举的情况太多 只能用暴力搞,即枚举被去掉的两个区间,那么如何判断去掉哪两个区间比较好? 维护去掉后剩下的点数即答案 代码 #include<bits/stdc++.h> using namespace std; int n,q,i,j,l[5005…
D. Stressful Training 题目链接:https://codeforces.com/contest/1132/problem/D 题意: 有n台电脑,每台电脑都有初始电量ai,也有一个耗电量bi,意即每1s耗电多少,现在你有一个充电器,它每s可以给一台电脑充x的点亮. 问x最少为多少,可以让所有电脑直至k时刻,点亮都不小于0. 题解: 我们考虑贪心,先给最需要充电的电脑充电,然后二分答案x去检验.大概思路就是这样吧...但是实现起来还是有点困难. 首先处理出每个电脑最晚需要充电的…
题目链接:http://codeforces.com/contest/1194                                            A.Remove a Progression time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output You have a list of numbers from 11…