AcWing第1场热身赛题解
A. AcWing 3544. 寻找变化前的01序列
题目链接:https://www.acwing.com/problem/content/3547/
题目大意:给定一个 \(01\) 串,消掉连续的 \(5\) 个 \(1\) 后面的 \(0\)。
解题思路:开个计数器记录连续的 \(1\) 出现的次数,若达到 \(5\) 切后面那个是 \(0\) 则去除那个 \(0\),同时计数器清零。
示例程序:
#include <bits/stdc++.h>
using namespace std;
char s[110];
int cnt, n;
int main() {
cin >> n;
while (n--) {
cin >> s;
cnt = 0;
for (int i = 0; s[i]; i++) {
if (s[i] == '0' && cnt >= 5) {
cnt = 0;
}
else {
putchar(s[i]);
if (s[i] == '1') cnt ++;
else cnt = 0;
}
}
puts("");
}
return 0;
}
B. AcWing 3545. 寻找奇特的数
题目链接:https://www.acwing.com/problem/content/3548/
题目大意:判断有多少对 \(i,j\) 满足 \(1 \le i,j \le n\) 且 \(i \times j = m\) 。
解题思路:从 \(1\) 到 \(n\) 枚举每个整数,若 \(i | m\) 且 \(\frac{m}{i} \le n\) 则找到一组满足条件的数。
示例程序:
#include <bits/stdc++.h>
using namespace std;
int T, n, m, cnt;
int main() {
cin >> T;
while (T--) {
cin >> n >> m;
cnt = 0;
for (int i = 1; i <= n; i++) {
if (m % i == 0 && m / i <= n)
cnt++;
}
cout << cnt << endl;
}
return 0;
}
C. AcWing 3546. 复制、剪切、粘贴
题目链接:https://www.acwing.com/problem/content/3549/
题目大意:模拟题目所述的字符串的三种操作。
解题思路:字符串模拟。按照题目要求模拟即可。
示例程序:
#include <bits/stdc++.h>
using namespace std;
string s, op, t;
int m, l, r;
int main() {
cin >> s >> m;
while (m--) {
cin >> op;
if (op[1] == 'U') { // CUT
cin >> l >> r;
t = s.substr(l, r-l+1);
s = s.substr(0, l) + s.substr(r+1);
} else if (op[1] == 'O') { // COPY
cin >> l >> r;
t = s.substr(l, r-l+1);
} else { // PASTE
cin >> l;
s = s.substr(0, l+1) + t + s.substr(l+1);
}
cout << s << endl;
}
return 0;
}