题目链接:https://codeforces.com/contest/1385/problem/D 题意 一个小写字母串称为 $c-good\ string$,如果至少满足以下条件之一: 字符串长度为 $1$,包含字母 $c$ 字符串前一半都为字母 $c$,后一半为 $(c+1)-good\ string$ 字符串后一半都为字母 $c$,前一半为 $(c+1)-good\ string$ 计算将一个长为 $n = 2^k$ 的小写字母串变为 $a-good\ string$ 至少需要替换多少个…
题目链接:https://codeforces.com/contest/1385/problem/C 题意 去除一个数组的最短前缀使得余下的数组每次从首或尾部取元素可以排为非减序. 题解一 当两个大数夹着一个小数那么第一个大数及其之前的数必须要去掉,比如 $1,1,2,1,2$,要去除的前缀长为 $3$,但是考虑到也会有 $1,1,2,1,1,2$ 的情况,所以可以将原数组去重后判断每三个相邻的元素. 代码 #include <bits/stdc++.h> using namespace st…
题目链接:https://codeforces.com/contest/1385/problem/B 题意 有两个大小为 $n$ 的相同的排列,每次从二者或二者之一的首部取元素排入新的数组,给出这个大小为 $2n$ 的数组,找到原先的排列. 题解 忽略所有第二次出现的数即可. 代码 #include <bits/stdc++.h> using namespace std; void solve() { int n; cin >> n; map<int, bool> vi…
题目链接:https://codeforces.com/contest/1385/problem/A 题意 给出三个正整数 $x,y,z$,找出三个正整数 $a,b,c$ 使得 $x = max(a, b), y = max(a, c), z = max(b, c)$ . 题解 假设有 $a \le b \le c$ 满足条件,那么 $x,y,z$ 中一定会有两个 $c$,一个 $b$,$a$ 的范围为 $[1,b]$ . 代码 #include <bits/stdc++.h> using n…
A. Three Pairwise Maximums #构造 题目链接 题意 给定三个正整数\(x,y,z\),要求找出正整数\(a,b,c\),满足\(x=max(a,b), y=max(a,c),z=max(b,c)\) 分析 我们可以先将\(x,y,z\)降序排序得到\(z\leq y\leq x\).由于\(x\)是\(a,b,c\)三者最值,且通过三个关系中\(x\)所代表的数字一定出现两次,可以推断出,\(y=x\),如果最值没有出现两次,说明我们不可能构造出\(a,b,c\). 既…
题意:有一个长度为\(n=2^k\)的字符串,对于某个字符\(c\),我们定义他是一个\(c-good\),如果: ​ 1.\(len=1\),并且\(s[1]=c\). ​ 2.\(len>1\),\(s[1]=s[2]=...=s[\frac{len}{2}]=c\),并且另外一半是一个\((c+1)-good\)字符串. ​ 3.\(len>1\),\(s[\frac{len}{2}+1]=s[\frac{len}{2}+2]=...=s[len]=c\),并且另外一半是一个\((c+1…
题意:给你一个数组\(a\),可以删除其前缀,要求操作后得到的数组是"good"的.对于"good":可以从数组的头和尾选择元素移动到新数组,使得所有元素移动后得到的新数组是非递减的.问最少删除前多少个元素满足条件. 题解:因为只删除前缀,所以我们可以倒着来看,感觉自己搞复杂了. ​ 假如数组从最后一位开始倒着递增的话,当我们遇到第一个不满足递增的位置时,只要要求从这个位置开始向左递减即可. ​ 假如数组从最后一位开始倒着递减的话,那它就只能一直递减下去,即遇到的第…
题意:有两个完全相同的排列,将其中一个的元素按相对顺序插入另外一个排列中,给你操作完的排列,求原排列. 题解:感觉看看样例就能直接写了啊,直接遍历,用桶存数字个数,如果桶为空,直接输出即可. 代码: int t; int n; vector<int> v; map<int,int> mp; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>t; while(t--){ cin>>n; mp.c…
题意:给你三个正整数\(x\),\(y\),\(z\),问能够找到三个正整数\(a\),\(b\),\(c\),使得\(x=max(a,b)\),\(y=max(a,c)\),\(z=max(b,c)\). 题解:容易看出,\(a,b,c\)中最大的数一定会在\(x,y,z\)中出现两次,所以我们只要判断\(x,y,z\)中最大的两个数是否相等即可,如果满足,输出最大值和最小值和一个\(1\). 代码: int t; int a[3]; int main() { ios::sync_with_s…
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate it n = int(raw_input()) s = "" a = ["I hate that ","I love that ", "I hate it","I love it"] for i in ran…