Div3
CF 1893 A
题目描述
有以下操作:
- 选择数组
的一个固定点 。固定点是指满足 的点。 - 令
循环左移 次。
求数组
思路
可以发现,上次选择的固定点
时空复杂度均为
代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 200001;
int t, n, k, a[MAXN];
bool vis[MAXN];
void Solve() {
cin >> n >> k;
for(int i = 1; i <= n; ++i) {
cin >> a[i];
vis[i] = 0;
}
for(int i = 1, p = n; i <= k && !vis[p]; ++i) {
if(a[p] > n) {
cout << "No\n";
return;
}
vis[p] = 1;
p = p + n - a[p] - (p + n - a[p] > n) * n;
}
cout << "Yes\n";
}
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
for(cin >> t; t--; Solve()) {
}
return 0;
}
CF 1893 B
题目描述
给定数组
思路
最终肯定是使最终的
- 从大到小枚举
中的数,找到 中第一个小于它的,并把它插在前面。
空间复杂度
代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 200001;
int t, n, m, a[MAXN], b[MAXN];
void Solve() {
cin >> n >> m;
for(int i = 1; i <= n; ++i) {
cin >> a[i];
}
for(int i = 1; i <= m; ++i) {
cin >> b[i];
}
sort(b + 1, b + m + 1, greater<int>());
int i = 1, j = 1;
for(; i <= n; ++i) {
for(; j <= m && b[j] >= a[i]; ++j) {
cout << b[j] << " ";
}
cout << a[i] << " ";
}
for(; j <= m; ++j) {
cout << b[j] << " ";
}
cout << "\n";
}
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
for(cin >> t; t--; Solve()) {
}
return 0;
}
本文作者:yaosicheng124
本文链接:https://www.cnblogs.com/yaosicheng124/p/18473859
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步