codeforces
qcccc_
这个作者很懒,什么都没留下…
展开
-
E. Polycarp and String Transformation
E. Polycarp and String Transformation题目链接首先这个题的字母的删除顺序可以先确定下来,最后删除的字母最后出现,倒二删除的字母倒二出现......然后可以根据删除字母的顺序找到原串,因为第一个删除的字母肯定是原串该字母的个数,第二个则是两倍,第三个则是三倍,以此类推,然后最后再按照题意模拟,看看最后可不可以得到初始串。#include <algorithm>#include <deque>#include <iomanip&g原创 2021-08-20 15:15:45 · 279 阅读 · 0 评论 -
Codeforces Round #734 (Div. 3)
E. Fixed Points题目链接看完题解挺简单的一道dp题目题意:给你一个数组,每次可以删除一个数,让你求出删数的个数最少的次数,使得a[i]==i的个数大于等于k。题解:设dp[i][j]为前i个数保留j个数,然后如果第i数保留的话那么就得a[i]==j才能使得dp[i][j]更新(dp[i][j]=max(dp[i-1][j-1]+1,dp[i][j]),如果第i个数不保留的话,那么就是dp[i][j]=max(dp[i][j],max(dp[i-1][j-1],dp[i-1][j])原创 2021-07-25 10:46:54 · 109 阅读 · 0 评论 -
Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)
E. Permutation Shift本题的题意是:你有种操作是让排列(原排列为1,2,3....n)循环,你循环k次则原来的排列变为a[(i-k+n)%n],例如k=2,就变成了n-1,n,1,2,3,....n-2。现在问你,给你一个排列b[n],让你找出从(1,2,3,...n)有多少种k,以及循环k次后最多可以任意交换两个数m次,使得这个排列变为b[n]。首先我们先找出b[n]中每一个数对应的循环多少次vis[(i-a[i]+m)%n],然后枚举每一种k的可能,因为m最多是n/3,所以最多原创 2021-07-23 11:32:54 · 104 阅读 · 0 评论 -
Codeforces Round #731 (Div. 3) F
F. Array Stabilization (GCD version)本题大概题意是:给你一个数组,每次变换为a[i]=gcd(a[i],a[i+1]),而且是一个环状的,即a[n]=gcd(a[n],a[0]),每次操作遍历一遍数组,问经过多少次操作是得a[1]==a[2]==a[3]==....a[n].思路是:第一次操作后a[1]=gcd(a[1],a[2]),a[2]=gcd(a[2],a[3]),a[3]=gcd(a[3],a[4])...第二次操作后 a[1]=gcd(a[1],g原创 2021-07-15 15:09:18 · 139 阅读 · 0 评论 -
Codeforces Round #731 (Div. 3) G
G - How Many Paths?本题的题面意思大概是:如果一个点不可以从1开始到达那么输出0如果一个点可以从1到达且路径有且仅有一条输出1如果可以从1到达且有多条路径则输出2如果有无数条路径到达则输出-1本题需要注意的是存在自环大概思路肯定是优先找-1,因为-1其实很好找,就是找环,找环(强连通块)的方法有几种:拓扑排序,tarjan,拓扑排序应该也是可以做的吧,我看很多人都是用tarjan做的。找到环中的这些点后,由这些点扩张出来的点一定也是-1。然后就可以开始找1,2了,从原创 2021-07-15 11:24:02 · 100 阅读 · 0 评论 -
Codeforces Round #686 (Div. 3)F
题目链接这一题看完的唯一想法就是RMQ其他别无想法,但是仔细一想,如果是1到n中只放一个点然后来查找的话,然后要查找是否存在一个点为分界线使得左边的最小值等于右边的嘴大值时是满足单调性的,因为越往右移动最小值也越小,最大值也越小所以是满足单调性的,这里是中间有两个点,所以我们可以固定左边界,然后二分再查找是否有满足题意的点。不过二分的边界情况有点难搞,仔细理一下就好了。//#include<bits/stdc++.h>#include<iostream>#include<原创 2020-11-27 20:50:17 · 92 阅读 · 0 评论 -
Codeforces Round #664 (Div. 2) C
害,这个题目被hack掉了,真难受啊,害的我掉了60多分,菜鸡如我到现在还没有上蓝,我太菜了。这个题目的做法就是暴力枚举,首先得预处理出每个ai和每个bi&的值,然后就开始暴力枚举答案从0到(1<<9);如果满足题意就输出一定是最小的。为什么可以枚举呢?假设a|b=c那么c>=a&&c>=b,所以如果枚举的答案是k那么k|ci<=k#include<iostream>#include<stdio.h>#include&.原创 2020-08-14 14:18:53 · 111 阅读 · 0 评论 -
F - Ants CodeForces - 318D
题目戳我早训的cf题目,当时一直没写出来但是知道怎么写一直调不出来就很烦,因为可能是负数,所以我们把(0,0)变成(1000,1000)结合题目给定的蚂蚁数量就再也不可能有负数出现了,先bfs预处理出所有蚂蚁的位置就很舒服了,可是细节不到位,写撮了。#include<iostream>#include<stdio.h>#include<math.h>#include<string.h>#include<string>#includ原创 2020-08-07 14:21:07 · 905 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2) A,B,C,D
A - Common SubsequenceA题就特别简单大水题,找a,b两个数组中是否有相同元素,如果有,输出一个,没了。int a[1005],b[1005];void sove(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=m;i++) {.原创 2020-07-24 14:28:56 · 105 阅读 · 0 评论 -
Codeforces Round #656 (Div. 3)A,B,C,D,E(其他待补)
A. Three Pairwise Maximums简单题,但是我想了蛮久的,我哭了。对于满足条件的x,y,z绝对有两个数是相等的而且还要大于另外一个数,我也不好解释为什么,所以,,,,将就一下吧,自己看看样例想想吧,面向答案编程我太难了。我不是很想写题意,因为本来就是容易理解的英文题,而且出去打比赛都是英文题,大家要习惯看英文void sove(){ int a[4]; scanf("%d%d%d",&a[1],&a[2],&a[3]); s.原创 2020-07-18 09:51:43 · 214 阅读 · 0 评论 -
Educational Codeforces Round 91 (Rated for Div. 2) D. Berserk And Fireball
题目链接戳我可能是我太菜了,一个模拟题写了好久这题的输入太坑了,以为是x,y,k,结果是x,k,y,害的我样例一一直输出6,一度怀疑样例错了.题目意思:有n个数,他们的大小是a[i],另外还有m个数b[i],问经过以下两种操作把a[i]变成b[i],如果不能变成b[i]输出-1;1.花费x点神力删去连续k个数(不能少也不能多)(当x=2k,花费为2x)2.花费y,删去相邻位置最小的那个数题解:首先考虑哪些不能变成b[i],b[i],和a[i]的相对位置都不对的肯定不行例如a[i]=1 2 3 4原创 2020-07-15 10:22:46 · 237 阅读 · 0 评论