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;
}
posted @ 2022-04-06 20:55  quanjun  阅读(27)  评论(0编辑  收藏  举报