文章目录
Educational Codeforces Round 102 (Rated for Div. 2)
A.Replacing Elements
题意: 每次操作都能将某个数字替换为2个数字的和
题解: 如果全部数字都小于等于m或者存在2个数字的和小于等m即可
代码:
#include <bits/stdc++.h>
using namespace std;
int const MAXN = 2e6 + 10;
int n, m, T, a[MAXN];
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) scanf("%d", a + i);
sort(a + 1, a + 1 + n);
if (a[n] <= m || a[1] + a[2] <= m) puts("YES");
else puts("NO");
}
return 0;
}
B.String LCM
题意: 给定2个字符串,求2个字符串的lcm
题解: lcm长度为2个字符串长度的lcm。因此只需要判断达到lcm时2个字符串是否相等即可。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
int const N = 2e5 + 10;
int n, m, T;
string s1, s2;
int main()
{
cin >> T;
while (T--)
{
cin >> s1 >> s2;
int len1 = s1.size();
int len2 = s2.size();
int len = len1 * len2 / __gcd(len1, len2);
string res1 = "";
for (int i = 0; i < len / len1; i++)
res1 += s1;
string res2 = "";
for (int i = 0; i < len / len2; i++)
res2 += s2;
if (res1 == res2)
cout << res1 << endl;
else
cout << "-1" << endl;
}
return 0;
}
C.No More Inversions
题意: 输入n和k,数组a是从1到k,k到2k-n的数组。b[i] = p[a[i]],要求数组b的逆序对数量小于等于a,求p数组字典序最大,p是1到k的一个排列。
题解: 分析发现就是把重复的那段给倒着打印一下即可。
代码:
#include <bits/stdc++.h>
using namespace std;
int t, n, k;
int main() {
cin >> t;
while (t--) {
scanf("%d%d", &n, &k);
for (int i = 1; i < (k - (n - k)); i++) {
printf("%d ", i);
}
for (int i = k; i >= (k - (n - k)) ; i--) {
printf("%d ", i);
}
puts("");
}
return 0;
}
D.Program
题意: 一个机器人一开始位于0点,给定机器人走的路的方向,±-±-,表示右左左右左左。然后给定m个区间:l, r,表示如果忽略第l步 ~ 第r步,那么机器人的会走到的不同的点有多少个。
题解:
方法1:
因为机器人走的路是连续的,因此每次走的路都是在上一次的基础上延续的,因此一个机器人能走到的点就是能够走到的最右侧的位置-能走到的最左侧的位置。而最右侧的位置就是最大的前缀,最左侧的位置就是最小的前缀。
现在分析m次操作,每次[l ~ r]个操作被忽略,那么在1 ~ l - 1步能够走到的点就是1 - l-1的最大最小前缀,在r+1 ~ n能够走到的点就是这个范围内的最大最小前缀-[l, r]位置的偏移量。因此如果记录1 ~ l - 1的最大最小前缀为:maxv1和minv1,记录r + 1 ~ n的最大最小前缀为maxv2和minv2,偏移量为offset,那么答案就是: m a x ( m a x v 1 , m a x v 2 − o f f s e t ) − m i n ( m i n v 1 , m i n v 2 − o f f s e t ) + 1 max(maxv1, maxv2 - offset) - min(minv1, minv2 - offset) + 1 max(maxv1,maxv2−offset)−min(minv1,minv2−offset)