CF
穷源溯流
路很长,尽管走便是。
展开
-
Manthan, Codefest 16 A - Ebony and Ivory(扩展欧几里得)
A. Ebony and Ivorytime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputDante is engaged in a fight with "The Savior". Before he can fight it with his sword, he needs to break its shields. ...原创 2021-05-22 17:54:22 · 235 阅读 · 0 评论 -
Educational Codeforces Round 108 (Rated for Div. 2) C. Berland Regional(换位思考)
const int N=2e5+5; int n,m; int i,j,k; pii a[N]; vector<ll> v[N]; int len[N]; ll ans[N];void clear(){ for(int i=1;i<=n;i++) v[i].clear(),ans[i]=0;}int main(){ rush(){ sd(n); for(int...原创 2021-05-06 20:24:03 · 199 阅读 · 0 评论 -
洛谷 CF25E Test(KMP)
#include <bits/stdc++.h>#define dbg(a) cout<<#a<<" : "<<a<<endlusing namespace std;const int N=1e5+5;char s[4][N];int f[4][N];int minn=1e9;void getfail(char *s,int id){ f[id][0]=f[id][1]=0; int len=strlen...原创 2021-04-23 18:41:18 · 229 阅读 · 0 评论 -
Codeforces Round #716 (Div. 2) B. AND 0, Sum Big(组合数学)
ll pow_mod(ll a,ll x){ ll ans=1; while(x){ if(x&1) ans=ans*a%mod; a=a*a%mod; x>>=1; } return ans;}int main(){ //IOS; rush(){ sdd(n,m); ll ans=pow_mod(n,m); pll(ans...原创 2021-04-20 08:18:50 · 235 阅读 · 0 评论 -
Codeforces Round #716 (Div. 2) D. Cut and Stick(主席树)
const int N=3e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int sum; }T[N*40]; int root[N],tot=0;void update(int l,int r,int &x,int y,int pos){ T[++tot]=T[y]; T[tot].sum++; ...原创 2021-04-20 08:09:08 · 191 阅读 · 0 评论 -
洛谷 CF484E Sign on Fence(主席树+二分)
前置题目const int N=1e5+5; int n,m,_; int i,j,k; struct Step { int c,id; bool operator<(Step &o){ return c<o.c; } }a[N]; struct Node { int l,r,len; int sum,lsu...原创 2021-04-17 20:10:40 · 229 阅读 · 0 评论 -
Codeforces Round #457 (Div. 2) D. Jamie and To-do List(主席树×2)
const int N=2e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<6]; int root[N],arr[N],tot=0; map<string ,int > mp; int cnt=0;void update(int &x,in...原创 2021-04-16 16:14:35 · 151 阅读 · 0 评论 -
Educational Codeforces Round 107 (Rated for Div. 2) D. Min Cost String(构造)
const int N=3e5+5; int n,m,_; int i,j,k; char a[N];int main(){ while(~sdd(n,m)){ char ch='a'; int cur=0; for(int i=2*m-1;i>=1;i-=2){ a[++cur]=ch; char tmp=ch; for(int...原创 2021-04-13 16:02:20 · 169 阅读 · 0 评论 -
Codeforces Round #429 (Div. 1) D. Destiny(主席树)
const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; void update(){ sz++; } }t[N<<5]; int root[N],tot=0;void update(int &x,int y,int pos,int l,int r){ ...原创 2021-04-02 16:43:40 · 197 阅读 · 0 评论 -
CodeCraft-21 and Codeforces Round #711 (Div. 2) D. Bananas in a Microwave(枚举+数学)
TLE code:const int N=2e6+5; int n,m; int i,j,k; int a[N]; int vis[N]; vector<int> v;int idx(ll x){ int ans=x/100000; if(x%100000) ans++; return ans;}int main(){ while(~sdd(n,m)){ int op...原创 2021-03-30 17:09:54 · 686 阅读 · 2 评论 -
CodeCraft-21 and Codeforces Round #711 (Div. 2) B. Box Fitting(枚举)
const int N=2e6+5; int n,m; int i,j,k; int a[N]; int vis[N];bool judge(){ for(int i=20;i>=0;i--) if(vis[1<<i]) return 0; return 1;}int main(){ rush(){ sdd(n,m); for(int i=1;i<=n;i++)...原创 2021-03-30 14:10:16 · 312 阅读 · 0 评论 -
Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) B. Restore Modulo(思维)
const int N=2e5+5; int n,m; int i,j,k; ll a[N];bool go(ll c,ll m){ for(int i=2;i<=n;i++){ if((a[i-1]+c)%m==a[i]) continue; return 0; } return 1;}int main(){ rush(){ sd(n); forn...原创 2021-03-22 11:09:53 · 174 阅读 · 0 评论 -
Codeforces Round #709 (Div. 1, based on Technocup 2021 Final Round) A. Basic Diplomacy(构造)
某个人有 n 个朋友,他要在这 m 天里,每天找一个朋友来玩,之后有 m 行,每行代表第 i 天哪个朋友可以来和他一起玩,但是每个朋友 k 来的天数不能超过先将当天只有一个人的放上去;之后再找多个的且还能来的朋友,因为如果当天有多个朋友可以一起来玩耍,如果可以达成条件的话,当天来的朋友数量最小为 2,而const int N=1e5+5; int n,m; int i,j,k; pii a[N]; vector<int> v[...原创 2021-03-22 10:15:14 · 177 阅读 · 0 评论 -
Educational Codeforces Round 106 (Rated for Div. 2) B. Binary Removals(思维)
要求构造一个字符串所有的 1 必须在 0 后面,在原有的字符串上删除 i 不能删除 i+1 但可以删除i+2,求是否可以构造成功如果有 11 出现,那么一定会有一个 1 ,如果在其后面有 00 出现,那么一定不满足题目要求int main(){ rush(){ string s; cin>>s; int flag=0; for(int i=1;i<s.size() &&am...原创 2021-03-21 12:41:43 · 231 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3) E1. Reading Books (easy version)(思维)
给出 n 本书的阅读时间以及 A,B 是否愿意读,1 表示愿意,0 表示不愿意,A,B 每个人都要看 k 本书,但如果两个人都喜欢看一本书,那么只要有一个人看了,两个人就算都看了,问两人看完所有书花费的最小时间const int N=2e5+5; int n,m; int i,j,k; int a[N]; vector<int> u,v,w;int main(){ while(~sdd(n,k)){ ll a...原创 2021-03-17 20:37:31 · 169 阅读 · 0 评论 -
Codeforces Round #642 (Div. 3) D. Constructing the Array(优先队列)
在一个长度为 n 的全 0 数组中构造 1~n 的一种排列。选择长度最长的全 0 子段,如果有多个,选择最左边的;然后在 (l+r)/2 的位置上依次插入 1~n,输出最后构造的序列const int N=2e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int len; bool operator<(const Node...原创 2021-03-17 18:38:50 · 157 阅读 · 0 评论 -
ABBYY Cup 2.0 - Easy D2. Encrypting Messages(前缀+思维)
给出 n 个数 a[],有一个长度为 m 的滑动窗口 b[]每一次窗口移动使得 a[1~m] + b[1~m] ,之后 a[2~m+1] + b[1~m] ,直到 a[n-m+1,n] + b[1~m] 为止,输出最后 a[i]%c 的值模拟一下样例可以发现 :如果 i <m ,那么 a[i]=a[i]+pre[i] 如果 n-i+1<m,那么 a[i]=a[i]+suf[m-n+i] 否则 a[i]=a[i]+pre[m]其中 pre 和 suf 分别表...原创 2021-03-17 17:25:28 · 247 阅读 · 0 评论 -
ABBYY Cup 3.0 - Finals (online version) A2. Oh Sweet Beaverette
有 n 个数,要求删除任意个数,使得剩下的数满足条件且总和最大最左边和最右边的数必须是相同的我们需要挑选出一个区间 [l,r] ,使得在 (l,r) 之内的正数和最大可以现预处理所有正数的前缀和,而且 a[l] 和 a[r] 的数值必须相等,用 map 记录数值出现的最后一个位置就好了const int N=3e5+5; int n,m; int i,j,k; int a[N]; map<int,int> mp; ...原创 2021-03-16 19:56:29 · 177 阅读 · 0 评论 -
ABBYY Cup 3.0 E3. Summer Homework(线段树+思维+斐波那契)
题目就是要求完成上述操作,每次操作 2,都要输出结果const ll mod=1e9;const int N=2e5+5; int n,m; int i,j,k; int a[N]; ll f[N],sum[N]; struct Node { int l,r,len; ll s1,s2,lazy; void init(int l,int r){ ...原创 2021-03-15 17:27:30 · 238 阅读 · 0 评论 -
Bubble Cup 12 - Finals [Online Mirror, unrated, Div. 1] F. Workout plan(优先队列)
有一个人要锻炼 n 天,初始时战斗力为 k,每天都要达到 x[i] 才可以,每天都有一款饮料价格为 c[i],每一款饮料都可以让他的战斗力增加 A,问最少要花都少钱才能完成每天的计划,如果有一天不能输出 -1由于增加的战斗力是固定的,所以挑当前最便宜的是最优的const int N=2e5+5; int n,m; int i,j,k; int a[N];int main(){ while(~sdd(n,k)){ priori...原创 2021-03-13 17:00:46 · 277 阅读 · 0 评论 -
Codeforces Round #215 (Div. 1) A. Sereja and Algorithm(思维)
给出一个字符串,有多次询问,每次询问一个区间,对于每次询问,如果该区间任意排序后,任意的三个连续的字符可以表示成其中的一个,那么称这个区间是好的把题意转化过来就简单了,如果一个区间上出现次数最多的字符串-出现次数最少的字符串<=1,那么这个区间就是好的;当然如果一个区间的长度<=2,不满足大前提,同样也是好区间const int N=2e5+5; int n,m; int i,j,k; char s[N];int main(){ ...原创 2021-03-13 16:25:04 · 151 阅读 · 0 评论 -
Codeforces Round #129 (Div. 1) B. Little Elephant and Cards(离散化)
有 n 张牌,每张牌先输入它的正面,再输入它的反面,问最少有几次翻面可以使正面的花色出现的数量超过一半首先如果一种花色出现次数超过 n 的一半才有可能产生答案,题目模拟即可但是如果没有答案需要输出 -1,最重要的是一张牌可能两面都是相同的花色,这样其对花色的贡献数量为 1const int N=2e5+5; int n,m; int i,j,k; pii a[N]; vector<int> v; pii sum[N]; ...原创 2021-03-13 15:44:32 · 188 阅读 · 0 评论 -
Codeforces Beta Round #75 (Div. 1 Only) B. Queue(权值线段树)
给出 n 个数,对于每个数找到其最右边比他严格小的数,问这两个数之间的距离是多少,如果没有输出 -1利用权值线段树将每个点的位置放到权值上,当然先要进行离散化,我们需要先添加最右边的数,但是一定要注意到可能有相同的元素,那么一定要取位置最大的那个const int N=1e5+5; int n,m; int i,j,k; int a[N]; vector<int> v,res; struct Node { ...原创 2021-03-13 15:13:40 · 192 阅读 · 0 评论 -
Codeforces Round #285 (Div. 2) C. Misha and Forest(拓扑排序)
要求建一棵树,给出 0~n-1 每个节点的信息 x 和 yx 表示与其相邻的节点个数 y 表示与其相邻的节点编号的异或和最后输出边的个数,以及每条边的左右端点题目给出的是一棵树,所以一定存在度为 1 的叶子节点,所以从叶子节点开始,将与叶子节点相邻的边剪掉,这样会形成新的叶子直到根节点为止const int N=1e5+5; int n,m; int i,j,k; int into[N],sum[N]; vector<int>...原创 2021-03-13 10:57:18 · 185 阅读 · 0 评论 -
Codeforces Round #420 (Div. 2) C. Okabe and Boxes
有 2*n 次操作add x,将 x 压入栈中 remove,将栈顶弹出现在要求将栈弹出时可以形成一个 1~n 的顺序排列,所以我们可以趁栈不注意,在任意两次操作之间将栈内的元素重新排序,问形成最后的序列时,所用的最小的排序次数是多少先模拟一个栈,如果栈顶元素不是下一个需要的数字那么将他们全部标记;注意如果有新的元素进来了,新元素不会影响它们的顺序,但会阻碍他们出栈const int N=3e5+5; int n,m; int i,j,k; i...原创 2021-03-13 10:06:52 · 144 阅读 · 0 评论 -
Codeforces Round #198 (Div. 2) D. Bubble Sort Graph(二分)
给出长度为 n 的排列,求如果 a[i]>a[i+1] 那么这两个数交换位置,并且 a[i] 与 a[i+1] 之间形成一条边,问任意两个数字之间没有边的最大数量是多少题目转化一下就是求最长上升子序列,由于 n 的范围很大,所以用 dp 的方法会超时,所以利用二分和一个栈求解const int N=2e5+5; int n,m; int i,j,k; int a[N]; int stk[N],top=1;int main(){ ...原创 2021-03-13 09:23:15 · 127 阅读 · 0 评论 -
Educational Codeforces Round 27 C. Two TVs(模拟)
一个人可以同时看两台电视,但是如果一台电视在 [x,y] 时间内播放,如果在 [z,w] 时间内的节目也想要在这台电视上播放必须满足 z>y,是否可以用两台电视将所有节目看完const int N=2e5+5; int n,m; int i,j,k; pii a[N];int main(){ while(~sd(n)){ forn(i,1,n) sdd(a[i].fr,a[i].sc); int flag=1;...原创 2021-03-13 09:02:58 · 177 阅读 · 0 评论 -
Codeforces Round #362 (Div. 1) A. Lorenzo Von Matterhorn(LCA)
NoteIn the example testcase:Here are the intersections used:Intersections on the path are3,1,2and4. Intersections on the path are4,2and1. Intersections on the path are only3and6. Intersections on the path are4,2,1and3. Pas...原创 2021-03-13 08:33:33 · 187 阅读 · 0 评论 -
Codeforces Round #558 (Div. 2) B2 - Cat Party (Hard Edition) (思维)
给出 n 个数,找出一个最大的 x,使得前 x 个数中任意删除一个数之后,其余数字的出现个数相同可以利用两个数组,f 数组表示 a[i] 的出现次数,F 数组表示 a[i] 的出现次数的出现次数如果,说明在添加一个数即可成立 如果,说明在 i 位置成立const int N=2e5+5; int n,m; int i,j,k; int a[N]; map<int,int> f,F; int main(){ ...原创 2021-03-10 20:00:17 · 209 阅读 · 0 评论 -
Codeforces Round #296 (Div. 2) C. Glass Carving(端点线段树)
给出一个矩形的长和宽,以及操作次数 n将这个矩形放到一个坐标系中,每次操作可以沿 x 轴方向或 y 方向切一刀,每次操作后,输出这些小矩形中面积最大的矩形可以将题目转化为开始时 1~x 中每一条长度为 1 的线段都是 1,被切断的那个为 0,那么只要统计区间的最长连续 1 的个数,利用端点线段树可以解决问题 const int N=2e5+5; int n,m; int i,j,k; //int a[N]; struct Node {...原创 2021-03-10 17:25:57 · 136 阅读 · 0 评论 -
Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined)B. Minimize the error(优先队列)
给出两个长度为 n 的数组,每个数组各有 x,y 次操作,每次操作可以将数组内的任意一个数 +1/-1,最后使得两个数组 最小不难想到要用优先队列维护两个数组之间差的绝对值,而且 x,y 的数据范围都是 1e3,需要注意的是队列中可能都是 0,所以每次都要将一个正数放入队列当中const int N=2e5+5; int n,m; int i,j,k; int a[N];int main(){ int x,y; while(~s...原创 2021-03-10 09:33:20 · 162 阅读 · 0 评论 -
Codeforces Round #167 (Div. 2) C. Dima and Staircase(线段树)
题意看看图例还是很好明白的,给出 n 个数,分别表示方块的个数,给出 m 次更新,每次更新输入一个长方形的长和宽,长方形从 1 位置开始落下,每次落下后输出此长方形落在第几块方格上利用线段树,每次询问 [1,l] 的最大值,然后区间更新 [1,l] 的最大值+w,(好像不用更新也可以)const int N=2e5+5; int n,m; int i,j,k; int a[N]; struct Node { ...原创 2021-03-10 08:40:48 · 132 阅读 · 0 评论 -
Codeforces Round #481 (Div. 3) F. Mentors(思维+二分)
有 n 个程序员,每个程序员都有他的技能分数,分数严格高的可以做分数低的程序员的老师,但是有 k 对人发生过矛盾,他们不能构成师生关系,问每个人最多可以做几个人的老师开始想的是开一个数组从 i∈[1,n] 记录分数<=i 的人数(离散化之后),然后对于每一组发生矛盾的人 x,y,将其满足条件的答案 -1 处理,但是这样需要知道 x,y 他们的答案emmm,也就是说,我们需要预处理出每一个人的答案,答案不就是比它小的所有数的个数之和吗,哪有离散化那么麻烦const int...原创 2021-03-08 21:08:27 · 204 阅读 · 3 评论 -
Manthan, Codefest 17 B. Marvolo Gaunt‘s Ring(线段树+思维)
有 n 个数,以及 p,q,r要求找到三个数 使得最大,其中由于题目具有后效性,开始没有注意到,枚举 i∈[1,n] 使得 a[i]*p,然后用线段树找到 j∈[i,n] 使得 a[j]*q,再找到 k∈[j,n] 使得 a[k]*r,但是这样的做法是不对的,只能过到 12 个样例因为每一步都是最优的,并不能代表整体最优如果枚举 j,在从区间 [1,j] 和 [j,n]分别找 i 和 k 的话这样是正确的,其余上述的做法不同的是,上述做法没有考虑后效性而缩小了区间范...原创 2021-03-08 19:59:59 · 205 阅读 · 0 评论 -
Codeforces Round #536 (Div. 2) B. Lunar New Year and Food Ordering(优先队列+模拟)
有 n 盘菜,输入其对应的数量和菜价,有 m 个客人依次来购买,对于每一位客人,输入其想买菜的编号和数量,如果没有这种菜,就怂恿客人把店里便宜的先买了,如果客人需要的数量>店里所拥有的菜的数量,那么客人会很生气,并且免费拿走这些由于每拿走一些菜品数量都会减少,因为每次都要用最小的来补充,所以用优先队列存取价格,但是优先不能及时维护菜品数量,所以不能够维护菜品数量在使用单调队列时,尽量避免结构体的使用const int N=2e5+5; int n,...原创 2021-03-08 17:37:09 · 238 阅读 · 0 评论 -
Codeforces Round #193 (Div. 2) B. Maximum Absurdity(线段树+思维)
题目要求我们找到两个长度为 k 的不相交的子段,使得这两个子段之和最大,输出这两个子段的左端点先将 [k,n] 的长度为 k 的子段和求出来,将其放入线段树中,然后枚举区间 i∈[k,n],使 i 作为第一段子段,再在 [i,n] 区间内寻找最大子段即可,保存最大值和答案const int N=2e5+5; int n,m; int i,j,k; int a[N]; ll sum[N],seg[N]; struct Node ...原创 2021-03-08 15:41:35 · 116 阅读 · 0 评论 -
Codeforces Round #702 (Div. 3) F. Equalize the Array(前缀和)
有 n 个数,要求删掉某些数使得所有的数出现次数都相同为 x,x 为任意值知道这个题用前缀和解决后,应该会有思路,可以先处理出 have[i] 和 pre[i] ,分别表示出现 i 次的数字有多少个和多少种,这样在从 1~n 枚举一边看看到底应该让 x 为多少合适即可const int N=2e5+5; int n,m; int i,j,k; int a[N]; int sum[N],have[N],pre[N]; vector<i...原创 2021-03-08 14:29:41 · 227 阅读 · 0 评论 -
Educational Codeforces Round 15 B. Powers of Two(思维)
有 n 个数,要求找到多个二元组 i<j,其中 a[i]+a[j] =(2 的任意次幂)思路还是很好想的,就是对于出现的每个数在 [2,2e9] 内查找是否与其互补的数,但是很遗憾,我爆空间了,分析原因可能是,每次判断的时候都开辟了一个 map,使得空间复杂度为MLE Code:const int N=1e5+5; int n,m; int i,j,k; int a[N]; map<int,int> mp;int m...原创 2021-03-07 11:35:24 · 156 阅读 · 0 评论 -
Codeforces Round #622 (Div. 2) C1. Skyscrapers (easy version)(暴力)
给出 n 个数,要求选择一个数作为其中的最大数,其两边的数不能够超过它,要求最后的答案为所有数之和并且最大,输出这 n 个数对于每个数,将其设为最大值,判断所有数之和即可,算法复杂度const int N=1e5+5; int n,m; int i,j,k; int a[N]; int c[N],ans[N];int main(){ while(~sd(n)){ for(int i=1;i<=n;i++) ...原创 2021-03-07 10:33:24 · 244 阅读 · 0 评论 -
Codeforces Round #705 (Div. 2) B. Planet Lapituletti(暴力)
给出时间的进制数,再给出一个时间,人们想要活在镜像之中,如果时间的镜像都在进制范围内,且只由 0,1,2,5,8 组成的数字,那么人们是满意的,求将来人们满意的最近真实时间先将给出的字符串转化为数字,然后逐渐对分钟+1,直到镜像满足存在且满足进制const int N=1e5+5; int n,m; int i,j,k; int a[N]; map<int,int> mp;int main(){ mp[18]=8...原创 2021-03-07 09:09:51 · 411 阅读 · 0 评论