首页 > 其他分享 >Codeforces Round 921 (Div. 2)

Codeforces Round 921 (Div. 2)

时间:2024-01-29 12:22:43浏览次数:28  
标签:int Codeforces long cin tie 字符串 921 Div define




A - We Got Everything Covered!

难度: ⭐

题目大意

给定n和k两个整数, 要求用前k个小写字母组成一个字符串; 该字符串的子串应包含所有由前k个字母组成的长度为n的字符串全排列; 要求输出最短的满足条件的字符串;

解题思路

这题题目挺唬人, 但其实是个水题; 所谓最短, 其实就是把前k个小写字母重复输出n遍就是最短情况了;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 1e6 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m;
signed main() {
    int t;
    cin >> t;
    while(t--){
        cin >> n >> m;
        for(int i = 1; i <= n; i++){
            for(int j = 0; j < m; j++){
                cout << (char)('a' + j);
            }
        }
        cout << endl;
    }
    return 0;
}




B - A Balanced Problemset?

难度: ⭐⭐

题目大意

给定两个整数n和m; 要求把n分为m份, 所得的分数就是这m个数的最大公约数; 请问该分数最大是多少

解题思路

设最大分数是x, 我们可以先分出m份x, 然后把剩下的全放在其中一份上, 并且剩下的部分(n - m * x)也一定是x的倍数(包括0); 这样就把n分为了两部分: m * x和 a * x; 其中a * x就是(n - m * x); 既然要x尽可能大, 也就是让(m + a)尽可能小, 而且(m + a)和x都是n的因数; 所以只要找出第一个大于等于m的因数就可以了;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 1e6 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m;
signed main() {
    int t;
    cin >> t;
    while(t--){
        cin >> n >> m;
        int minn = n;
        for(int i = 1; i <= n / i; i++){
            if(n % i == 0){
                if(i >= m) minn = min(minn, i);
                if(n / i >= m) minn = min(minn, n / i);
            }
        }
        cout << n / minn << endl;
    }
    return 0;
}




C - Did We Get Everything Covered?

难度: ⭐⭐⭐

题目大意

和A题相似, 不过这次是给出由前k个字母组成的字符串s, 请问他是否包含所有由前k个字母组成的长度为n的子串; 如果没有则输出任意未包含的字符串;

解题思路

从A题找到的规律就是如果要s满足条件, 那么s就要可以被分成n份, 每份都至少含有前k个字母; 所以我们可以根据这个规律扫一遍字符串s, 看看能不能找出n份; 如果不能, 设我们只找到了m份, 那么就取这m份格子最后一个字母, 再加上当前这份缺的那个字母, 然后用'a'补齐字符串长度, 所得到的就是一个缺失的字符串; 这里读者可以思考一下为什么要取每份的最后一个字母;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 1e6 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m;
signed main() {
    int t;
    cin >> t;
    while(t--){
        int k;
        cin >> n >> k >> m;
        string s, res = "";
        cin >> s;
        set<int> st;
        int idx = 0;
        for(int i = 0; i < s.size(); i++){
            st.insert(s[i]);
            if(st.size() == k){
                res += s[i];
                idx++;
                st.clear();
            }
        }
        if(idx >= n) cout << "YES" << endl;
        else {
            for(int i = 0; i < 26; i++){
                if(!st.count('a' + i)){
                    res += ('a' + i);
                    break;
                }
            }
            while(res.size() < n) res += 'a';
            cout << "NO" << endl << res << endl;
        }
    }
    return 0;
}

D - Good Trip

难度: ⭐⭐⭐⭐

标签:int,Codeforces,long,cin,tie,字符串,921,Div,define
From: https://www.cnblogs.com/mostimali/p/17994252

相关文章

  • CF337E Divisor Tree
    题意简述定义DivisorTree为一棵树:叶子上的数为质数。非叶子上的数为其所有儿子上的数的乘积。给定\(n\)个数\(a_i\),你需要让每个\(a_i\)都在DivisorTree上出现,并最小化DivisorTree的节点数量。\(n\le8,a_i\le10^6\)。分析显然DivisorTree上只能有质数......
  • Codeforces Round 921 (Div. 2)(A~E)
    好久不打用小号水了一场,赛时坑坑拌拌勉强四题,以为美美上分,结果重测时卡掉了我没细想复杂度就交了的B题,这下小丑了 A.WeGotEverythingCovered!直接输出n次连续前k个字母即可#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongsignedmain(){ ios......
  • Codeforces Round 921 (Div. 2)
    CodeforcesRound921(Div.2)A-WeGotEverythingCovered!解题思路:以前\(k\)个字符都出现过至少一次为一轮,构造\(n\)轮即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecon......
  • Codeforces Round 920 (Div. 3)
    A-Square难度:⭐题目大意给定正方形的四个顶点,求该正方形的面积;解题思路根据四个点找出长和宽即可,因为数据范围有负数,为了方便我都进行了移位;神秘代码#include<bits/stdc++.h>#defineintlonglong#defineIOSios::sync_with_stdio(false);cin.tie(0......
  • Codeforces Round 921 (Div. 2) A-D
    倒叙讲题预警()传送门:https://codeforces.com/contest/1925D.GoodTrip题意:有n个小盆友,其中m对是好盆友,每队好盆友有友谊度fi。老师要举办k次远足,每次挑一对小盆友去,被挑到的小盆友友谊值+1。如果一对儿童不是朋友,那么他们的友谊值为0,在以后的游览中不会改变。求所有被选中参......
  • Codeforces Round 921 (Div. 1) 记录(A-D)
    比赛链接:https://codeforces.com/contest/1924官解链接:https://codeforces.com/blog/entry/125137这场整体来说表现还可以,最终performance\(2431\),delta\(+33\)。A.DidWeGetEverythingCovered?还不错的贪心题。进入状态有点慢,写了几个小错误B.SpaceHarbourC.Frac......
  • Codeforces Round 921 (Div. 2) 赛后总结
    搜索替换int->longlong是一个好习惯赛后5分钟就改对E题了,好可惜。不过1个小时都没能做出来,也说明自己不太熟练吧线段树善于维护满足区间可加性的一类信息,这与本题中的代价和相契合。特殊之处在于其修改方式。每个区间会在线段树上被划分为\(O(log_{2}n)\)个小区间即使是最......
  • Codeforces Round 921 (Div. 2)
    CodeforcesRound921(Div.2)比赛地址A.WeGotEverythingCovered!思路这个就是一个简单的拼接,这里很容易的发现我们最后最优的方法就是将所要拼写的字母按顺序拼接成n份就好了,但是这里需要主义一下简单的优化Code#include<bits/stdc++.h>usingnamespacestd;#define......
  • CodeForces 1924C Fractal Origami
    洛谷传送门CF传送门对这种题一点办法都没有。。。可以手动折叠发现\(n=3\)时\(M=2+2\sqrt{2},V=2+4\sqrt{2}\)。于是大胆猜结论,第二次折叠开始,每次产生的山谷和山峰的长度相等。为什么呢?考虑从第二次折叠开始,设当前纸的层数为\(k\)(事实上若当前是第\(i\)......
  • CF Round 921 (Div. 2)
    linkA一种可行的方案是将前\(k\)个字母重复\(n\)次,对于每个要找的字符串,从\(n\)段中分别选取一个字符就可以得到。B如果\(x\)是答案的话,它一定满足\(x|n,\frac{x}{n}\leqm\),直接枚举答案,时间复杂度\(O(\sqrtn)\)。C沿着A的思路继续思考,如果能将\(s\)分成至......