[codeforces] 暑期训练之打卡题(三)

时间:2021-08-17
本文章向大家介绍[codeforces] 暑期训练之打卡题(三),主要包括[codeforces] 暑期训练之打卡题(三)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

每个标题都做了题目原网址的超链接


Day21《Alphabetic Removals

题意:

给定一个字符串,要求按照字典序按照出现的前后顺序删除 k 个字母

题解:

  1. 记录字符串中各个字母出现次数
  2. 删去字典序下前 k 个

代码注释会比较清楚,题解可能讲的有点模糊了

上板子:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[26] = { 0 };
int main()
{
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;
    string t = s;
    sort(s.begin(), s.end());//按照字典序 a-z 排序
    for (int i = 0; i < k; i++)
    {
        num[s[i] - 'a']++;//前k个字符都删除,记录其对应的字母的个数
    }
    for (int i = 0; i < t.size(); i++)
    {
        if (num[t[i] - 'a']) num[t[i] - 'a']--;//按照出现次序删除字母
        else cout << t[i];//该字母已无需删除
    }
    return 0;
}

Day22《Anti-Sudoku

题意:

更改一个数独使其满足:每行、列、3*3的方格内,至少有两个元素相等

题解:

更改一个数为另一个数就行

上板子:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 7;
int cnt[N];
int main() {
    int t;
    cin >> t;
    while (t--) {
        for (int i = 0; i < 9; i++) {
            string s;
            cin >> s;
            for (char& c : s)
                if (c == '1')//随便一个1~9的数字变成1~9的另一个数字即可
                    c = '2';
            cout << s << endl;
        }
    }
}

原文地址:https://www.cnblogs.com/liubaili/p/15110695.html