- 博客(189)
- 收藏
- 关注
原创 E - AND-MEX Walk (并查集理解)
E - AND-MEX Walk分析:结论+并查集的连通性求解首先易证答案就3种:0,1,2故分类讨论(分别对30位求解连通性):0:存在某一位使得u,v连通1:存在某一位的连通块的 边的集合 存在偶数边,这样就能先到 偶数边 再到v 这样保证 ans=12:其余情况#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> using namespace std;
2022-04-26 16:41:08
429
原创 E - The Journey of Geor Autumn(线性DP,前缀和)
E - The Journey of Geor Autumn分析:线性DP+前缀和令dp[i]表示前i个数的方案数贡献dp[i]=∑j=1kdp[i−j]∗(j−1i−1)∗fac[j−1]dp[i]=\sum_{j=1}^k dp[i-j]*(_{j-1}^{i-1})*fac[j-1]dp[i]=j=1∑kdp[i−j]∗(j−1i−1)∗fac[j−1]对于dp[i],首先找到最小的元素x,那么x必然会出现在前k个枚举这k个位置,每个位置都是将len 分为了两部分,x在
2022-04-11 16:05:19
510
1
原创 Educational Codeforces Round 126 (Rated for Div. 2)
Educational Codeforces Round 126 (Rated for Div. 2)A - Array Balancing从后往前 直接反转即可,无后效性#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> #define yes cout<<"YES\n";#define no cout<<"NO\n";using namespace
2022-04-11 12:20:19
586
2
原创 FFT 板子
存个偷来的多项式板子,用过的都说好(赞)constexpr int P(998244353), G(3), L(1 << 18);inline void inc(int &x, int y) { x += y; if (x >= P) x -= P;}inline void dec(int &x, int y) { x -= y; if (x < 0) x += P;}inline int mod(LL x) { return x % P;
2022-04-05 14:58:01
525
原创 E - Equal Tree Sums(树上问题)
E - Equal Tree Sums分析:神仙思维+树上问题+结论如果没有ai!=0a_i!=0ai!=0的条件,直接全取0就是现在有这个条件,想办法往这个条件构造考虑树上的任意一条边的两个端点,往0靠,则正负取,即黑白染色每个点的权值取其度数这样就能保证这一整颗树(无根树)的权值为0,任意去掉一个“根节点”若根为正:则剩下的子树的权值和都是为-1若根伟负:则剩下的子树的权值和都是为1#include <bits/stdc++.h>#define int
2022-03-27 16:45:51
228
原创 D - K-good
D - K-good分析:推式子+分类讨论+分解因数n−(k+1)k/2≡0(mod k)n-(k+1)k/2\equiv 0(mod \ k)n−(k+1)k/2≡0(mod k)因为a[i]>0,所以不是(k−1)k/2(k-1)k/2(k−1)k/2可以看出要分两类:k为奇数:则k为n的因数k为偶数:则k2\frac{k}{2}2k为n的因数#include <bits/stdc++.h>#define int long l
2022-03-27 16:44:44
204
原创 CodeTON Round 1 (Div. 1 + Div. 2)
CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!)A - Good Pairs签到~#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> using namespace std;const int N=1e5+5;struct node { int x,id; bool operator < (const
2022-03-27 16:42:48
853
原创 E - Star MST(组合数学+DP)
E - Star MST分析:组合数学 + DP只需要给出根节点出发的n-1条边的长度,剩下的边的长度,就是由这些边推出来的具体原理详见大佬dp[i][j]dp[i][j]dp[i][j] 表示前i条边,最大边到j时的方案(总数)#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> using namespace std;const int N=255, mo
2022-03-23 21:21:58
495
原创 Educational Codeforces Round 125 (Rated for Div. 2)
Educational Codeforces Round 125 (Rated for Div. 2)A - Integer Moves签到#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> using namespace std;const int N=1e5+5;void solve(){ int x,y; cin>>x>>y
2022-03-23 21:20:36
780
原创 D - For Gamers. By Gamers.
D - For Gamers. By Gamers.分析:阅读理解+打表+二分答案(神仙打表)令我方的伤害和血量分别为(a,b)(a,b)(a,b),敌方为(c,d)(c,d)(c,d), 我方的数量为n则,我方能打死敌方的条件是:KaTeX parse error: Expected 'EOF', got '&' at position 14: \frac{d}{na}&̲<&\frac{b}{c} \…b[i]b[i]b[i] 表示花费i最大的伤害
2022-03-23 19:10:51
1267
原创 B - Chessboard
B - Chessboard分析:阅读理解题,组合数学,神仙思维" the shortest distance between any two blocks would remain unchanged after they were painted"主要是这句话,不能让任意两个访问过的格子的最短距离发生改变,想一下可以发现以下几条规则:首先,从始至终都是在同一个连通块,然后不断向外扩展到最后,画满的情况下,任意两点的最短路都是曼哈顿距离最后,结束的地方一定是四角之一为了满足
2022-03-16 20:58:46
658
原创 工作安排(反悔贪心板子题)
工作安排 - 题目 - Daimayuan Online Judge分析:贪心,将set当链表用从后往前考虑(这样先入队的就一直能到最后),碰到更小的时刻,就将之前入队的 能出的全出#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> using namespace std;const int N=1e5+5;struct node { int d,p; bool
2022-03-14 21:01:09
1955
原创 Codeforces Round #775 (Div. 2)
Codeforces Round #775 (Div. 2)A - Game签到题~#include <bits/stdc++.h>#define int long longusing namespace std;const int N=1e3+5;int a[N];void solve(){ int n,m; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int l=1,
2022-03-13 14:46:22
674
原创 超市(优先队列,区间动态变化)
超市优先队列,区间 l,rl,rl,r 动态选择的一些小技巧本题,就是随时间增加,g[i]g[i]g[i] 入队#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> using namespace std;const int N=1e5+5;struct node { int x,r,w; bool operator < (node b) co
2022-03-11 20:31:41
272
原创 Educational Codeforces Round 124 (Rated for Div. 2)
Educational Codeforces Round 124 (Rated for Div. 2)A - Playoff签到~#include <bits/stdc++.h>#define int long long using namespace std;const int N=1e5+5;void solve(){ int n; cin>>n; int ans=1; for(int i=1;i<=n;i++) an
2022-03-11 12:12:43
563
4
原创 CF770 E - Fair Share(神仙构造)
E - Fair Share分析:思维+欧拉回路首先考虑不成立的情况,当存在某一数只出现奇数次,则不成立对于每个序列都要 L R 二分,奇数号点向偶数号点建边,黑白染色后相邻两点被分别分到LR,这样以来每个序列都是LR二分的然后就是关键,最后要使LR是相同的,对于相同的数字,每两个每两个的建边最后再跑染色,是完全可以构造出来的#include <bits/stdc++.h>#define int long long using namespace std;
2022-02-26 13:39:04
363
原创 CF772 E - Cars(二分图染色,拓扑排序)
E - Cars分析:二分图染色,拓扑排序分两类情况:相遇:只能相向而行(xr<xlx_r<x_lxr<xl)相离:只能背向而行(xr>xlx_r>x_lxr>xl)因此,不管是什么情况,相邻两点方向不同,先跑一遍二分图染色,不成立,则 “NO”染完色之后,令 1向R走,0向L走,建有向图相遇:xr<xlx_r<x_lxr<xl ,建 1 到 0 的边相离:xr>xlx_r>x_lxr>xl
2022-02-25 16:46:21
641
原创 CF773 E - Anonymity Is Important(stl迭代器的各种用法)
E - Anonymity Is Important分析:区间覆盖,set去重,剔除无效信息输出有三种情况:NO:最好处理,在之前被删除过YES:对于当前x,它前面一个,后面一个不与它共有一个有效区间,也就是说x本身有一个有效区间(有效区间是指可能有病人的区间)N/A:即其它情况,与其它(前或后)有重合区间剔除无效信息:对于每一个点,至多两个区间对其有效,一个左一点,一个右一点#include <bits/stdc++.h>#define int long
2022-02-25 14:59:40
704
原创 Codeforces Round #773 (Div. 2)
Codeforces Round #773 (Div. 2)A - Hard Way签到题,当某两个点连线与x轴平行,且第三个点在这条连线之下,才做考虑#include <bits/stdc++.h>#define int long long using namespace std;const int N=1e5+5;void solve(){ int a,b,c,d,e,f; cin>>a>>b>>c>>d
2022-02-24 10:26:35
511
原创 Educational Codeforces Round 123 (Rated for Div. 2)
Educational Codeforces Round 123 (Rated for Div. 2)A - Doors and Keys#include <bits/stdc++.h>#define int long long using namespace std;const int N=1e5+5;void solve(){ string s; cin>>s; int a=0,b=0,c=0,fg=0; for(int i
2022-02-23 16:50:06
270
原创 Codeforces Round #772 (Div. 2)
Codeforces Round #772 (Div. 2)A - Min Or Sum签到题#include <bits/stdc++.h>#define int long long using namespace std;const int N=1e5+5;int a[N];void solve(){ int n; cin>>n; int s=0; for(int i=1;i<=n;i++) cin>>a[
2022-02-22 19:11:17
432
原创 G.ACM is all you need (map 遍历,分类讨论,思维)
G.ACM is all you need分析:map 遍历,分类讨论,思维若对 a[i](1<i<n)a[i](1<i<n)a[i](1<i<n) 展开讨论,会有四种情况a[i]<a[i+1] and a[i]<a[i−1]a[i]<a[i+1] \ and\ a[i]<a[i-1]a[i]<a[i+1] and a[i]<a[i−1]:会对 ans 贡献1,当b比某个值还要大
2022-01-25 20:32:06
448
1
原创 2022牛客寒假算法基础集训营1
2022牛客寒假算法基础集训营1A.九小时九个人九扇门分析:要先发现一个特点:对于多个数的合并,先求和再求根,与先分别求根 再求根的和 的根,效果是一样的,举个栗子:17+23+79=119=2,8+5+7=20=2因此,先分别将n个数求取根,就变成n个1~9的数了然后就是类似01背包的动态转移dp[i][change(x+j)]+=dp[i−1][j]dp[i][change(x+j)]+=dp[i-1][j]dp[i][change(x+j)]+=dp[i−1][j]转换
2022-01-25 20:28:09
186
原创 K. 冒险公社 (线性DP)
K. 冒险公社题意:根据预测情况,求前 n 个岛最多的绿岛数分析:没有思路的情况下,先想了一下暴力,O(3n)O(3^n)O(3n) 显然超时暴力枚举所有情况,每次都会考虑n个岛的具体颜色但实际上,对于每次预判我们只需要考虑当前岛和其前两个岛的颜色即可所以,考虑线性DP,枚举每三个岛的情况,记录状态,再状态转移即可dp[i][y][z]dp[i][y][z]dp[i][y][z] 表示前 i 个岛,第i个岛颜色为z,第i-1个岛颜色为y的情况下,最多绿岛数,那么状态转移方程为,
2022-01-25 15:38:04
533
原创 Codeforces Round #761 (Div. 2)
Codeforces Round #761 (Div. 2)A - Forbidden Subsequence分析:只有当 T=“abc”,且主串排完序后,有"abc"在子序列的时候,需要将 bc 换一下位置#include <bits/stdc++.h>using namespace std;const int N=1e6+5;char s[N];int vis[55];signed main(){ int T; cin>>T; w
2021-12-16 23:46:03
502
原创 Codeforces Round #757 (Div. 2)
Codeforces Round #757 (Div. 2)A. Divan and a Store分析:贪心#include <bits/stdc++.h>#define int long long using namespace std;const int N=1e6+5;int a[N];void solve(){ int n,l,r,k; cin>>n>>l>>r>>k; for(int i
2021-11-26 22:27:50
651
原创 Codeforces Round #756 (Div. 3)
Codeforces Round #756 (Div. 3)A. Make Even分析:就 0,1,2,−10,1,2,-10,1,2,−1 四种情况#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e6+5;char s[N];signed main(){ int T; cin>>T; while(T--) {
2021-11-26 16:43:44
568
1
原创 2021 ICPC 沈阳站 B. Bitwise Exclusive-OR Sequence(亦或,位运算,菊花图)
2021 ICPC 沈阳站B. Bitwise Exclusive-OR Sequence分析:图由链和环构成考虑环: 从一个点开始到这个点结束的亦或和为0(因为每个点权都用了两次),就是说:若出现环,且环的亦或和不为0,就输出 “-1”考虑链:从链的一端出发 设 (a1,a2,...,an)(a_1,a_2,...,a_n)(a1,a2,...,an) 为链上的点权a1∧a2=w1a_1\land a_2=w_1a1∧a2=w1a2∧a3=w2a_2\land a_3
2021-11-23 19:50:18
1253
原创 Educational Codeforces Round 117 (Rated for Div. 2)
Educational Codeforces Round 117 (Rated for Div. 2)A. Distance构造#include <bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+5;signed main(){ ios_base::sync_with_stdio(0); int T; cin>>T; while(T--)
2021-11-22 20:17:26
891
原创 状压DP入门记录
状压DPAcWing 1064. 小国王分析:状压 DPDPDP 入门题该题当中对国王冲突的处理,即 checkcheckcheck 的位运算处理是状压题型非常经典的操作f[i][j][state]f[i][j][state]f[i][j][state] 表示前 iii 行放置 jjj 个国王,且第 iii 行的放置状态为 statestatestate 的方案数ans=∑state=0f[i][j][state]ans=\sum_{state=0}^{}f[i][j][state
2021-11-07 19:29:11
167
原创 Codeforces Round #753 (Div. 3)
Codeforces Round #753 (Div. 3)A. Linear Keyboard#include <bits/stdc++.h>#define int long long using namespace std;const int N=1e6+5;char s[N],sr[N];int a[N];signed main(){ int T; cin>>T; while(T--) { cin>>s+1>>sr+1;
2021-11-05 17:40:23
127
原创 K. Hiding a Tree (模拟,分类讨论,情况合并)
K. Hiding a Tree分析:发现对 ansansans 造成影响的只有度为奇数的点,度为偶数的点就不用管因此,我们要修改的就是度为奇数且能修改的点再想一下,发现当这样的点存在三个或三个以上,直接修改这三个点即可然后就是,考虑当这样的点的个数小于三的情况为0,直接就输出-1为1,要去找一个可交换值的度为偶数的点为2,先看一下存不存在 ”为1“ 的情况,再判断这两个点综上,可分为两大类:先判断,存不存在能交换值的度为偶数的点再特判 ”为2“ ”为3“ 的情况即可
2021-11-05 17:27:30
130
原创 2021-2022 ACM-ICPC Brazil Subregional Programming Contest (队列操作)
2021-2022 ACM-ICPC Brazil Subregional Programming ContestE. Escalator分析:这题没什么,就是一个队列的模拟然后,一直被绕来绕去,不知道如何去维护当前的时间,与每个人到达时间的关系不清楚,在何时,电梯实现状态的转换,从上升到下降 OR 下降到上升电梯上升和下降两种状态,分两类状态的转换:仔细想假设现在电梯在上升,要实现状态的转换,分两种情况:上升队列当中已经没人了下一个要上升的人的到达时间,超过了电梯停止的时
2021-11-05 11:46:06
1812
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅