考虑到绝大多数 codeforces 题目在 luogu 上都有翻译,这个列表不会经常更新

  1. CF1669D Colorful Stamp
  2. CF1669E 2-Letter Strings
  3. CF1660B Vlad and Candies
  4. CF1656A Good Pairs
  5. CF1656B Subtract Operation
  6. CF1656C Make Equal With Mod
  7. CF1656D K-good

CF1669D Colorful Stamp

https://codeforces.com/problemset/problem/1669/D
初始一个全是W的字符串
每次操作可以选相邻两个位置,一个改成R,一个改成B
(选过的位置可以重复选)
(不能只选一个,必须是选相邻的2个位置)
(这两个位置可以改成BR也可以改成RB)
问最终结果是否可能是输入的字符串?

按W把字符串分成若干个非空段,如果每一段都有R且有B,那么就是YES
否则就是NO

CF1669E 2-Letter Strings

https://codeforces.com/problemset/problem/1669/E
输入n个长度为2的字符串
输出有多少对(s[i],s[j])字符串恰好差一个字符
s和t恰好差一个字符 的意思是 (s[0],t[0]) (s[1],t[1])两组位置,一组一样,另一组不一样
比如 AB 和 BC 不算差一个字符,因为两组位置都不一样

对是无序对,要求i<j

方法一:
对于每个种字符串,统计个数,一共至多有676种字符串
枚举676种字符串之间,哪些对字符串,恰好差一个字符

方法二:
每次读入一个新字符串s之后
答案 += 以s[0]开始的字符串个数 + 以s[1]结束的字符串个数 - 2 * 字符串s出现的次数

CF1660B Vlad and Candies

https://codeforces.com/problemset/problem/1660/B
多组数据
每组数据输入一个长度为n的数组
每次从数组中选一个最大值自减1
直到数组中所有数字变为0
不希望有一个数字连续两次减少1
问能不能做到,如果可以输出Yes,如果做不到输出No

https://codeforces.com/contest/1660/submission/151534158
特别注意n=1的情况,需要单独判断a[0]是不是1

CF1656A Good Pairs

https://codeforces.com/contest/1656/problem/A
输入一个数组,找到两个下标(i,j),使得对于所有的k都满足
abs(a[i] - a[k]) + abs(a[k] - a[j]) == abs(a[i] - a[j])

i是最大值的位置
j是最小值的位置

https://codeforces.com/contest/1656/submission/150990878

CF1656B Subtract Operation

https://codeforces.com/contest/1656/problem/B
输入一个数组a每次从中选择一个数字x,删去这个数字,其他数字都a[i]-=x
问操作n-1次之后,能不能恰好剩下k

如果可以,最后剩下的两个数字之差是k,这两个数字从开始的差就是k
相当于询问数组中是否有两个数字之差是k

https://codeforces.com/contest/1656/submission/150990342

CF1656C Make Equal With Mod

https://codeforces.com/contest/1656/problem/C
输入一个数组a,每次可以选一个数字x(x>=2),所有数字a[i]%=x
问能不能让所有数字都一样

如果输入的数字没有1,每次把最大的数字操作成0就可以了

如果输入的数字有1, 1是不会变的,每次把最大的数字操作成1就可以了

所以要求不能有相差为1的数字对

https://codeforces.com/contest/1656/submission/150989509

CF1656D K-good

https://codeforces.com/contest/1656/problem/D

输入 n 找 k(k>=2)
使得存在 k 个正整数,模 k 之后余数互不相同,并且这 k 个正整数的和是 n

相当于找k,使得 (n - k*(k+1)/2) % k == 0

如果k是奇数
那么 n % k == 0 && n >= k * (k + 1) / 2
满足k是奇数,且n%k==0的一个可行解是,n除以若干次2之后得到的结果

如果k是偶数
那么 n % (k/2) == 0 && n / (k/2) % 2 == 1 && n >= k * (k + 1) / 2
满足k是偶数,且n % (k/2) == 0 && n / (k/2) % 2 == 1,那么k一定是2的次幂

这两个解中,一定有一个k满足 n >= k * (k + 1) / 2

如果n是奇数 k=2
如果n是2的倍数 但不是4的倍数 k=4
如果n是4的倍数 但不是8的倍数 k=8

#include <bits/stdc++.h>
using namespace std;
int t;
long long n;
int main()
{
	cin >> t;
	for (int tt = 0; tt < t; tt++)
	{
		cin >> n;
		long long x = n & -n;
		if (x == n)
		{
			cout << -1 << endl;
		}
		else
		{
			// k = n / x;
			// k = 2 * x;
			// 较小的一定满足 k*(k+1)/2 <= n
			cout << min(n / x, 2 * x) << endl;
		}
	}
	return 0;
}
  1. CF1669D Colorful Stamp
  2. CF1669E 2-Letter Strings
  3. CF1660B Vlad and Candies
  4. CF1656A Good Pairs
  5. CF1656B Subtract Operation
  6. CF1656C Make Equal With Mod
  7. CF1656D K-good