AcWing第82场周赛题解


本次AcWing周赛主要还是要考察细节,难度不大。

A题

题目链接

第k个数

题解

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    sort(a.begin(), a.end());
    cout << a[n - k] << endl;
    return 0;
}

复杂度分析

快排,时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

B题

题目链接

多米诺骨牌

题解

将各种情况考虑清楚即可。

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int flag = 0;
    int ans = 0;
    int sum = 0;
    for (int i = 0; i < n; i++) {
        char c;
        cin >> c;
        if (c == '.') sum++;
        else {
            if (flag == 0 && c == 'L') {
                sum = 0;
                flag = -1;
            } else if (flag == 0 && c == 'R') {
                ans += sum;
                sum = 0;
                flag = 1;
            } else if (flag == -1 && c == 'R') {
                ans += sum;
                sum = 0;
                flag = 1;
            } else if (flag == 1 && c == 'L') {
                ans += sum % 2;
                sum = 0;
                flag = -1;
            }
        }
    }
    if (flag == 1) sum = 0;
    cout << ans + sum << endl;
    return 0;
}

复杂度分析

读入同时进行处理即可,时间复杂度为 O ( n ) O(n) O(n)

C题

题目链接

构造序列

题解

根据题意,0必须单独,1最多可以存在两个,共有n个0和m个1,因而可以推出只有满足
n - 1 ≤ \leq m ≤ \leq 2 × \times × (n + 1)
才能构造出满足规则的序列。

#include <iostream>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    if (m < n - 1 || m > 2 * (n + 1)) cout << -1 << endl;
    else {
        string s = "";
        if (n > m) s += "0";
        while (m > n && n) {
            s += "110";
            m -= 2;
            n -= 1;
        }
        while (m && n) {
            s += "10";
            m--;
            n--;
        }
        for (int i = 0; i < m; i++) {
            s += "1";
        }
        cout << s << endl;
    }
    return 0;
}

复杂度分析

明显可以 O ( n ) O(n) O(n)的时间复杂度完成构造。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值