首页 > 其他分享 >AtCoder Beginner Contest 314

AtCoder Beginner Contest 314

时间:2023-08-14 19:34:32浏览次数:49  
标签:std AtCoder Beginner int cin long 314 vector pos

AtCoder Beginner Contest 314 - AtCoder

A - 3.14 (atcoder.jp)

题目提供了100位,所以直接用字符串输出

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";
    int n;
    cin >> n;
    for(int i = 0;i < n + 2;i ++)
        cout << s[i];

    return 0;
}

B - Roulette (atcoder.jp)

感觉还是题意比较抽象,看懂了就能模拟出来了.

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int  n;
    cin >> n;
    vector<int> C[n + 1];
    for(int i = 1;i <= n;i ++){
        int x;
        cin >> x;
        for(int j = 0;j < x;j ++){
            int y;
            cin >> y;
            C[i].emplace_back(y);
        }
    }
    int X;
    cin >> X;

    set<pair<int,int>> s;
    for(int i = 1;i <= n;i ++){
        if(std::find(C[i].begin(), C[i].end(),X) != C[i].end()){
            s.insert({C[i].size(),i});
        }
    }
    
    if(s.size()){
        int cnt = 0;
        auto x = s.begin()->first;
        vector<int> ans;
        for(auto [i,j] : s){
            if(i == x)
                ans.emplace_back(j),cnt++;
            else
                break;
        }
        cout << cnt << '\n';
        for(auto i : ans )
            cout << i << ' ';
    }else
        cout << "0\n";
    return 0;
}

C - Rotate Colored Subsequence (atcoder.jp)

要把相同颜色都往左移一位,最后面的要移到前面来,所以我们可以预处理出相同颜色的字符串,然后最后一位放前面,我这里是逆转了一下,方便使用\(string.pop\_back()\),最后就是将对应颜色的放进去就好了

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n,m;
    string s;
    cin >> n >> m >> s;
    vector<int> c(n + 1);
    s = " " + s;
    for(int i = 1;i <= n;i ++) cin >> c[i];

    vector<string> sc(m + 1, "");
    for(int i = 1;i <= n;i ++){
        sc[c[i]] += s[i];
    }

    for(auto &i : sc){
        i = i.back() + i.substr(0,i.size() - 1);
        std::reverse(i.begin(), i.end());
    }

    string ans = "";
    for(int i = 1;i <= n;i ++){
        ans += sc[c[i]].back();
        sc[c[i]].pop_back();
    }
    cout << ans << '\n';
    return 0;
}

D - LOWER (atcoder.jp)

不管前面大小写翻转了几次,只有最后一次的大小写翻转能决定之前的字符串,之后因为没有翻转了,所以单点修改即可,因为要找到最后一次大小写修改,所以我们要用到离线思想,即把每次操作存起来判断,最后再处理结果

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    string s;
    cin >> n >> s >> m;

    vector<int> T(m + 1),X(m + 1);
    vector<char> C(m + 1);
    for(int i = 1;i <= m;i ++)
        cin >> T[i] >> X[i] >> C[i];

    int f = 1;
    int pos = 0;
    for(int i = m;i >= 1;i --){
        if(T[i] != 1){
            f = T[i];
            pos = i;
            break;
        }
    }

    if(pos > 1){
        for(int i = 1;i < pos;i ++){
            if(T[i] == 1){
                s[--X[i]] = C[i];
            }
        }
    }


    if(f == 2)std::transform(s.begin(), s.end(),s.begin(),::tolower);
    else if(f == 3) std::transform(s.begin(), s.end(),s.begin(),::toupper);

    for(int i = pos + 1;i <= m;i ++){
        if(T[i] == 1){
            s[--X[i]] = C[i];
        }
    }
    cout << s << '\n';
    return 0;
}

标签:std,AtCoder,Beginner,int,cin,long,314,vector,pos
From: https://www.cnblogs.com/Kescholar/p/17629536.html

相关文章

  • AtCoder Beginner Contest 314
    AtCoderBeginnerContest314-AtCoderA3.14voidsolve(){strings="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";intn;cin>>n;cout<<s.substr(0,n......
  • AtCoder Beginner Contest 314 A - Ex题解
    AtCoderBeginnerContest314A-3.14嗯,你可以用string存小数点后的...B-Roulette对于每一个金额,用个vector存pair<>存一个人赌了多少,以及是哪一个人。C-RotateColoredSubsequence每种数用个双向链表记下来。D-LOWER我们观察到,对于2,3操作,只有最后一次有用,且......
  • ABC 314 G
    简单题,但是我赛时没写完,少了一个\(5\)分钟。link程序有点丑,就不放link了,去掉注释在这。code#include<bits/stdc++.h>usingnamespacestd;#definede(x)cout<<#x<<"="<<x<<endlusingll=longlong;constintN=6e5+5;lln,m,h,a[N],b[N]......
  • ABC 314 F 题解
    原题传送门题意有n支队伍进行比赛,起初,第i支队伍只有选手i一个人。总共要进行n-1场比赛,每次给出p和q,意为让p所在的队伍与q所在的队伍进行比赛(数据保证此时p和q不在同一支队伍),设p所在的队伍有\(siz_p\)个人,q所在的队伍有\(siz_q\)个人,则此次比赛中p......
  • ABC314
    T1:3.14模拟代码实现s='3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679'n=int(input())ans=s[0:n+2]print(ans)T2:Roulette模拟代码实现#include<bits/stdc++.h>#definerep(i,n)for......
  • AtCoder Beginner Contest 214
    AtCoderBeginnerContest214-AtCoder [ABC214D]SumofMaximumWeights ------------------------------(典)题意:给出一颗N-1 条边的树,求树上任意两点间路径上的最大值的和这种问题考虑每条边单独看贡献,但是刚开始没太想明白怎么计算贡献,后面看了洛谷题解才懂了-......
  • Atcoder杂题笔记
    大概会把博客当草稿纸用(当然写出正解还是会把正解贴出来。[ARC080E]YoungMaids(待补代码)给定正偶数\(N\)。给定\(N\)元排列\(p=(p_1,p_2,...,p_N)\).Snuke打算根据下述步骤构造一个\(N\)元排列\(q\)。首先,令\(q\)为空。接下来,执行下述操作直到\(p\)为空......
  • Atcoder ABC307_G-Approximate Equalization 序列dp
    AT_ABC307_G-ApproximateEqualization没想到还有ApproximateEqualizationII!!:AT_ABC313_CDescription:给定一个长度为\(N\)的数列:\(A=(A_1,A_2,···,A_N)\),有两种操作可以以任意顺序进行任意多次(可以为0):\(A[i]-\)=\(1\)且\(A[i+1]+\)=\(1\),\((1\leqi\leqN-1)......
  • AtCoder-ARC073_A Sentou
    Sentou【题意】:有一个开关,当按下开关后的T秒内会一直放水,当在放水状态时,如果有人再次按下开关,那么停止放水,并从按下的那一刻起的T秒会再次一直放水,给出n个人按压开关的时间,问总共流出多少水【思路】:简单模拟#include<bits/stdc++.h>usingnamespacestd;typedeflon......
  • AtCoder Beginner Contest 313
    AtCoderBeginnerContest313A-ToBeSaikyo思路:找到最大的,和第一个比较#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI;t......