![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CF
Henry_WYH
兴趣使然
展开
-
一道有点巧妙的DP,一篇有点清晰的方法
大意就是给了一个长度为n的括号串S,要求在S之前加一个串P,在S之后加一个串Q,使得总长为m且保证。表示添加的前i个括号中,括号串的值为j,拼接上S之后的方案数,例如xxxxSxxxx(当前位置)表示添加的前i个括号中,括号串的值为j,且没有拼接上S的方案数,例如xxxxx(当前位置)我们一共需要添加n-m的括号,我们定义括号串的值为左括号-右括号的个数。,S的前缀中右括号比左括号多的值的最大值为。,显然有拼接S的时候前面P至少有。这两个状态分别对应加上。原创 2022-10-30 23:15:34 · 180 阅读 · 0 评论 -
Educational Codeforces Round 87 (Rated for Div. 2) C2.Not So Simple Polygon Embedding
先让整个2n边形的某个顶点对着(1,0),在这种情况下以(0,0)为中心构造的正方形显然不是最小的。我们也可以发现只需要绕着原点转一个角度就能够造出最小的正方形:可以画一画发现,旋转的角度为。然后对于C1的代码,只要把二分函数里的now角度改一下就好了。大致就是二分(这里二分应该是可以O(1)的)原创 2022-10-19 00:39:58 · 116 阅读 · 0 评论 -
D. Equal Binary Subsequences
我们只需要成对进行考虑即可,每一个成对的01和10反着操作即可。原创 2022-10-11 01:11:05 · 232 阅读 · 0 评论 -
Educational Codeforces Round 39 F,G
表示对于字符串F(i)与给出的字符串。这一段进行匹配的个数。原创 2022-09-29 20:00:18 · 121 阅读 · 0 评论 -
Codeforces Round #748 (Div. 3) F. Red-Black Number
VP没来得及做完,顺着思路做很快就写好了f[i][j][k][l]表示前i位数字红色取j位,红色组成数字mod A为k,蓝色数字mod B为l的方案是否成立,按照题意无脑转移然后最后获得每一步的决策:首先找到满足∣a−b∣|a-b|∣a−b∣最小的末尾决策,然后倒着dfs搜出答案即可当然官方的答案折半搜索也可以,但是没我的快// #define int LLconst int N = 50,M=N*2,mod=1e9+7;int n,m,cnt,A,B;string p;int f[N][N原创 2022-02-22 19:13:14 · 145 阅读 · 0 评论 -
Codeforces #745 div2 C. Portal
补完这道C题感觉收益匪浅啊…也学习到了优化n^4前缀和的技巧,感觉和之先做过的多维背包DP很类似:首先把行,列,和整个的前缀和预处理出来然后封装函数calc计算固定上界和下界时,某一列中符合要求的数量,如列y:然后写一个计算如图形状中,需要反转的数量的计算函数get;变成像一个汉堡一样,上界下界全是1,中间全是0的如图形状需要反转的次数然后我们就可以开始分析了;我们列出当确定上界up,下界dw,右界i的时候,(这些靠枚举),如何求得符合要求的传送门?借助我们之先封装好的两个函数,有:g.原创 2021-10-01 10:58:19 · 178 阅读 · 0 评论 -
Codeforces Round #735 (Div. 2) 1554D - Diane构造题
是一道考察思维的构造题为了不让任何子串出现偶数次,所以要避对称,因此比较好想的结构就是破坏对称结构的:如果n是偶数,则答案是a...(n/2个a)...aba...(n/2−1个a)...aa...(n/2个a)...aba...(n/2-1个a)...aa...(n/2个a)...aba...(n/2−1个a)...a如果n是奇数,则答案是a...(n/2个a)...abca...(n/2−2个a)...aa...(n/2个a)...abca...(n/2-2个a)...aa...(n.原创 2021-09-13 14:24:04 · 89 阅读 · 0 评论 -
Codeforces 757 C. Divan and bitwise operations 解题报告
这道题当时在比赛的时候瞎搞搞出来了,后面复盘的时候发现其实思维更高的一个层次可以省下很多代码量。首先声明,全子集异或和这个结论我事先是不知道的。然后我就想着要把这个序列给构造出来。常规思路:按位思考对于每一个l,r,k,我开一个数字组cnt[i][j]表示第i个数二进制位j位置上是0还是1.然后对于每一个l,r的或为k,如果k的第j位有1则利用差分的思想cnt[l][j]+=1,cnt[r+1][j]-=1;如果k的第j位没有1,则说明无论如何这里都不能有1,因此为了防止差分之后前缀和的+的效果.原创 2021-11-26 23:16:43 · 602 阅读 · 0 评论 -
easy&hard D. Divan and Kostomuksha
https://codeforces.com/contest/1614/problem/D1https://codeforces.com/contest/1614/problem/D2const int M = 20000000,N = 20010000, tot = M;LL gcd(LL a,LL b){return b ? gcd(b,a%b) : a;}LL n, m, x,prime[N/5],idx=0;bool numlist[N];void Eular(){ for(in原创 2021-11-30 20:22:50 · 302 阅读 · 0 评论 -
Codeforces Round #764 (Div. 3) F. Interacdive Problem
F题已经给了范围了,因此直接二分就行了,但是本题二分的值一直会变,因此只需要记录一个累加值,然后每次二分n-x,最后得到最终答案加上累加值就行了int n,last=0,sum=0;int ans[11];int read(){ int n; cin >> n; return n;}void print(int x,int k){ if(k) cout << "+ " << x << endl; else cout << "原创 2022-01-11 01:05:04 · 356 阅读 · 0 评论 -
Educational Codeforces Round 113 - C. Jury Meeting
只要保证最大的数后面有至少一个比他小1的数即可如果最大数比次大数大的超过1就是0,最大数有多个就是直接n的阶乘对于”保证最大的数后面有至少一个比他小1的数“可以这样算:我反向考虑,总情况减去比最大数小1的所有数都在最大数之前即可#include<unordered_set>#include<unordered_map>#include<algorithm>#include<string.h>#include<iostream>#.原创 2021-09-09 00:36:54 · 201 阅读 · 0 评论 -
C - Compressed Bracket Sequence
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std; typedef long long ll; inline int read() { int res=0,f=1;char ch; while(ch=getchar(),ch<'0'||ch>'9') if(ch=='-') f=-1; while(原创 2021-08-30 10:48:30 · 274 阅读 · 0 评论 -
Codeforces Round #742 - Div2 - C. Carrying Conundrum
样例:INPUT:5100128202110000OUTPUT:9474499这道题由于偶数位和奇数位独立,所以这个数奇偶位分拆之后进行操作即可假设奇数位组成的数是x,偶数位为y,则答案是(x+1)(y+1)-2;对于x或者y是0的情况特判一下即可#include<bits/stdc++.h>using namespace std;#define int long long int T;string n;//==================.原创 2021-09-06 01:32:48 · 196 阅读 · 1 评论 -
Educational Codeforces Round 118 (Rated for Div. 2) E - Crazy Robot
非常好些的BFS,注意一点是通过已知可以的点来扩展到未知但是可以的点const int mod = 998244353,N=1e6+5;int n,m;int row,col,sx,sy;vector<char> g[N];map<pii,bool> vis;int mov[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};queue<pii> Q;bool check(pii poi){ int x = poi.x, y = poi原创 2021-12-02 18:23:05 · 272 阅读 · 0 评论 -
Codeforces Round #767 (Div. 2) A~E
Codeforces Round #767 (Div. 2) A~EA Download More RAM大意是你一开始有 m G内存,每次你可以使用不超过你内存的RAM来升级你的内存,第i个扩充内存b[i].思路:直接贪心即可,每次都选最小的来升级。void solve(){ n=read();m=read(); rep(i,1,n) a[i].x=read(),a[i].y=i; rep(i,1,n) b[i]=read(); sort(a+1,a+1+n); for(int i=原创 2022-01-24 22:38:15 · 402 阅读 · 0 评论 -
Educational Codeforces Round 109 (Rated for Div. 2) A~E (VP)
A. Potion-making要达成一定的配比,考虑最坏情况k和100-k,然后分别除以最小公因子的和便是答案(2min)void solve(){ cin>>k; int x=k,sum=100; sum-=x; int d=gcd(x,sum); print(x/d+sum/d);}B. Permutation Sort直接分类讨论即可,最大值最小值的位置,如果有序是0,如果最大值或者最小值在自己的位置上是1,如果都不在但是最大值和最小值都在中间是2,否则如果最大原创 2022-03-08 19:08:11 · 217 阅读 · 0 评论