自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

the_xin的博客

19级的很弱的acmer

  • 博客(31)
  • 收藏
  • 关注

原创 The 2021 ICPC Asia Regionals Online Contest (II) L Euler Function

可能是这天 真的状态太差了 写了一半居然怀疑复杂度 没写了。。。我们对于每一个因子分开去维护对于一个数x = p1c1p2c2p3C3…每一个因子的欧拉函数为p1c1 (p1-1)/p1如果第一次修改当前因子那么乘上p1c1(p-1)/p如果有了直接乘上p1^c1欧拉函数是奇性函数如果p q互质那么pq的欧拉函数就是p的欧拉函数*q的欧拉函数想清楚发现 对于每个点最多单点修改25次明明在比赛中敲了一半多了 自己把他放弃贴一下ac代码给大家看看100以内一共25个质数然后用二进制表

2021-09-28 20:57:07 137

原创 2021牛客暑期多校训练营9 E.Eyjafjalla 倍增+线段树合并

题意:给出一棵树 父亲节点的权值>儿子节点1e5组询问 与x号点相连的点[L,R]范围内的点有多少个对于每个节点来说他所有的儿子都比自己小那么只需要看这个子树中的L-R的数量 然后接下来是对于这个节点的父亲来说 他需要找到最后一个小于等于R的父亲节点 那么最终答案就是找到的父亲节点的子树中 L-R权值的数量找父亲我们可以通过倍增来找统计子树信息 我的写法是一棵暴力的线段树合并 对于线段树合并来说 他是离线算法 高效统计每棵子树的信息复杂度分析:最高是一颗完美二叉树 从根节点往下分析对于

2021-08-14 17:32:55 279 1

原创 (Training 27)AtCoder Beginner Contest 191

A - Vanishing Pitch判断下距离即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;int main(){ int n,s,t,d; cin>>n>>s>>t>>d; int sd=n*s; int td=n*t; if(d<sd||d>

2021-02-10 20:57:24 254 1

原创 (Training 26)Educational Codeforces Round 94

A. String Similarity一个二进制字符串 构造一个长度为n的字符串使得长度原串为n的子串能在该构造出来的字符串中满足相同位置的字符相等思路:这里取字符串的第奇数个 必然满足条件#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;char str[N];int main(){ int T ; cin&

2021-02-10 18:55:16 263 1

原创 (Training 25)Educational Codeforces Round 93

A. Bad Triangle题意:输出一个不能组成三角形的3个数思路:直接考虑1 2 n即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e6+10;int a[N];bool check(int x,int y,int z){ if((x+y<=z))return 1; return 0;}int main()

2021-02-04 16:49:05 91

原创 (Training 24)AtCoder Beginner Contest 190

A - Very Very Primitive Game题意: “Aoki"有A个糖果 “Takahashi” 有B个糖果1表示"Takahashi“先吃 0表示” "Aoki"先吃每次吃一个轮到某个人没得吃的时候另一个人赢了 输出他的名字思路:直接比较即可#include<cstring>#include<algorithm>#include<iostream>using namespace std;const int N=1e5+10;int

2021-02-01 00:35:25 143

原创 (Training 23)Educational Codeforces Round 95

A. Buying Torches题意:起初有一个木棒 然后有2个操作将一个木棒换成x个木棒将y个木棒换成1个木炭一个火把需要一个木棒和一个火把问k个火把需要进行最少操作思路:首先一共需要多少木棒 y*k+k然后得到这么多木棒的最少操作次数 最后就是k次将木棒换成木炭的次数 计算出即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;const i

2021-01-31 16:54:26 115

原创 (Training 22)Educational Codeforces Round 103

A. K-divisible Sum题意:给你一个长度为n的数组 问使得数组的和被k整除时问a中最大元素最小是多少思路:当n<=k时 取(n+k-1)/k 向上取整当n>k时必然可以取2(必然可以使得n的和是k的倍数)但是当n时k的倍数时取1即可(当时我sb了)#include<iostream>#include<cstring>#include<algorithm>#include<set>using namespace s

2021-01-30 15:12:04 135

原创 数位DP小结

数位DP的记忆化搜索步骤为以下几步将计算范围预处理到state[N]数组中dfs函数的构造边界的判断 通过条件判断正确的返回值如果当前位置不被限制且已经搜索过的当前状态的值 直接返回(记忆化搜索)通过判断是否被限制 对当前 能枚举的位 枚举将能够转移的状态进行转移枚举结束后看当前位是否被限制 将他进行记录 然后返回AcWing 1081. 度的数量#include<iostream>#include<cstring>#include<algorithm

2021-01-27 17:31:40 82

原创 (Training 21)Codeforces Round #681

A. Kids Seating思路:非常easy的构造 从后往前即可#include<iostream>#include<cstring>#include<algorithm>#include<map>using namespace std;int main(){ int T; cin>>T; while(T--){ int n; cin>>n; for(int i=4*n,cnt=1;cnt<=n

2021-01-26 01:00:26 100

原创 (Training 20)Codeforces Round #682

A. Kids Seating比较easy的构造从后往前一直-2即可#include<iostream>#include<cstring>#include<algorithm>#include<map>using namespace std;const int N=1e3+10;int a[N][N];int dx[4]={0,-1,0};int dy[4]={-1,0,1};int main(){ int T; cin>&g

2021-01-26 00:44:34 104

原创 (Training 19)Codeforces Round #683

A. Add Candies每次操作都会多增加1非常简单的构造 如果一个位置一直不选择的话m次构造会增加1+2+3+…+m (1+m)*(m)/2只在第k次操作对i使用 那么这时候增加(1+m)*(m)/2-k因此我们发现操作n次从1到n会使得全部相等#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;int main

2021-01-25 01:20:59 107

原创 (Training 18)Codeforces Round #684

A. Buy the String思路:改为0 改为1 和一个都不改时输出最小即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=2e5+10;typedef long long LL;char str[1010];int main(){ int T; cin>>T; while(T--){ int n,c0

2021-01-23 00:07:14 148

原创 (Training 17)Educational Codeforces Round 98

A. Robot Program沿着对角线走完以后再把 最后把多出来的次数-1加上#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;int main(){ int T; cin>>T; while(T--){ int x,y; cin>>x>>y; int ans=abs

2021-01-22 23:41:43 163 1

原创 (Training 16)Codeforces Round #687

A. Prison Break题意:给出地图大小n*m 和点 (x,y)问地图上距离该点最远的点是多少思路:4个角落必然最远 取最大即可#include<iostream>#include<cstring>#include<vector>#include<algorithm>using namespace std;int main(){ int T; cin>>T; while(T--){ int n,m,x,y; c

2021-01-21 19:59:18 164 1

原创 (Training 15)Codeforces Round #688

A. Cancel the Trains思路:相撞的时候会在对角线相撞 那么统计对角线即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;bool st[N];int main(){ int T; cin>>T; while(T--){ memset(st,0,sizeof st); int n

2021-01-21 19:27:09 105 1

原创 (Training 14)AtCoder Beginner Contest 185

A - ABC Preparation输出四个中最小的即可#include<iostream>#include<cstring>#include<algorithm>#include<unordered_map>using namespace std;typedef long long LL;unordered_map<LL,bool>mp;int main(){ int x,minv=1e9; for(int i=1;i&l

2021-01-20 18:55:41 135 1

原创 (Training 13)Codeforces Round #689

A. String Generation因为是小等于 那么我们干脆使得他没有回文直接abcabcabc这样子#include<iostream>#include<cstring>#include<algorithm>using namespace std;char s[4];int main(){ s[1]='a'; s[2]='b'; s[3]='c'; int T; scanf("%d",&T); while(T--){ int

2021-01-20 12:01:34 76

原创 (Training 12)Codeforces Round #696

A. Puzzle From the Future思路:要使得值最大 那么数应该在前面出现的越多越好并且长度不缩减低所以我们首先把第一个位置作为1 用pre标记1出现最近的位置从前往后推所以输出1有3种情况如果前一个数大于我而且我输出的位置刚好为前一个 那么输出1如果前一个数小于我 那么输出1如果前一个数等于我 那么输出1反之输出0#include<iostream>#include<cstring>#include<algorithm>using

2021-01-20 11:23:07 129

原创 (Training 11)Codeforces Round #691

A. Red-Blue Shuffle只要看谁大的数量多即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e6+10;int a[N],b[N];int main(){ int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); string

2021-01-19 02:29:23 173

原创 (Training 10)AtCoder Beginner Contest 186

这场vp很友好 最后一分钟过了第5题A - Brickn/w即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;int main(){ int n,w; cin>>n>>w; cout<<n/w<<endl; return 0;}B - Blocks on

2021-01-19 02:01:36 171

原创 (Training 9)AtCoder Beginner Contest 187

A - Large Digits给2个数 求出他们每一位的和比较大小并输出#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N=1e5+10;int main(){ string a,b; cin>>a>>b; int ans1=0,ans2=0; for(int i=0;i<a.size();i++){

2021-01-17 18:07:33 98

原创 (Training 8)Codeforces Round #692

和arc差不多一样 签到题很友好A - In-game Chat就是判断右边开始连续括号的数量#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;char str[N];int main(){ int T; cin>>T; while(T--){ int n; cin>>n; c

2021-01-17 17:46:13 178 2

原创 (Training 7)KEYENCE Programming Contest 2021

晚上有点累 打得有点菜就过了2签到题 第二题还中间调错了A - Two Sequences 2思路:从前往后走一遍 维护一个最大值就行#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int N=2e5+10;int a[N],b[N],maxa[N];int main(){ int n; scan

2021-01-17 13:15:42 377

原创 (Training 6)Codeforces Round #694

A. Strange Partition题意:给出大小为n一个数组a ,能进行多次操作 将ai+aj合并合并后数组减短 得到数组b 给出一个x 问最大是多少思路:这里是用的向上取整 很好想如果全部合在一起那么最多是sum/x+1而如果全部拆开是那么可能是sum/x+n这里我们直接枚举即可 记得开longlong#include<iostream>#include<cstring>#include<algorithm>using namespace std;c

2021-01-15 23:51:12 92

原创 (Training 5)AtCoder Beginner Contest 188

从没打过atcoder于是vp了一场atcoder题面比较简洁 难度比cf div2低很多A - Three-Point Shot题意:判断是否一个数比另一个数大3以上#include<iostream>#include<cstring>#include<algorithm> using namespace std;const int N=1e5+10;int main(){ int x,y; cin>>x>>y; if(m

2021-01-15 23:20:53 246

原创 (Training 4)Codeforces Round #695

寒假vp的第一场cf 这场好像也有点难度A. Wizard of Orz题意:只能按下一次停止 按下后会开始往左右两边开始逐渐开始停止 问在某个位置按下后 所能得到的值最大是多少思路:一个简单的构造 首先我们应该知道应该时让首位为9是最好的 那么我们可以看 如果按下首位的话 那么第二位为0 再看按下第二位 那么要使得首位为9 在第二为为8时按下 这时候首位9 第3位也为9 这时候如果从第3为按下则第3为为7 前2位为9 8 所以从第二位为8时按下应该是最大值#include<iostream&

2021-01-15 13:29:53 164

原创 (Training 3)Educational Codeforces Round 102

能力不够只写了前4题 第四题在赛后10来分钟才调出来 又又又要掉分了A. Replacing Elements题意: 你可以做任意次操作 操作方法为选择 ai aj 使得 ak=ai+ak问你能不能 使得数组全部小于d思路:从前往后递推即可 只需要找出 是否存在2个数相加小于等于d 或者所有值都小于等于d#include<iostream>#include<cstring>#include<queue>#include<algorithm>u

2021-01-15 12:40:36 166

原创 (Training 2)goodbye 2020

A. Bovine Dilemma题意:任意2点距离的种数思路:暴力枚举即可#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;int a[N];bool vis[N];int main(){ int T; scanf("%d",&T); while(T--){ memset(vis,0,sizeof

2020-12-31 17:25:38 281

原创 (Training 1) Educational Codeforces Round 101

A. Regular Bracket Sequence题意:给你一段字符串 只有’(’ 、’)’、 ‘?’ ‘?‘能变成’(’ 或’)’只存在一个’(‘和一个’)’ 能否完成括号匹配那么只需要判断s[0]和s[s.size()]即可 比赛时没有看懂题目#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+10;int a[N],

2020-12-29 18:05:49 263 1

原创 线段树优化建图

我们知道线段树是维护区间问题的神器在图论中如果我们碰到区间建边问题:①将某点与[L,R]区间点连权值w的有向边常规做法是 for(int i=l;i<=r;i++)add(x,i,w); 情况时间复杂度为O(n)但是如果我们用到线段树 可以将复杂度优化为o(logn);我们建立一颗out树来维护[L,R]区间的点线段树上每个节点表示一个虚拟点 连接他所维护的[L,R] 距离为0有向边要注意的是idx的值初始化应该>n 因为线段树上的叶子节点是编号为1-n在我们建图时head[N

2020-10-13 22:06:16 1210

空空如也

空空如也

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

TA关注的人

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