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;
}