AtCoder Beginner Contest 235

Posted 最爱小崔同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder Beginner Contest 235相关的知识,希望对你有一定的参考价值。

 A Rotate

abc +bca +cab

#include <bits/stdc++.h>
 
using i64 = long long;
 
int main()
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int x;
    std::cin >> x;
    
    std::cout << (x % 10 + x / 10 % 10 + x / 100) * 111 << "\\n";
    
    return 0;

B B - Climbing Takahashi

#include<bits/stdc++.h>
using namespace std;
int main()

    int n;
    cin>>n;
    int ans=-1;
    for(int i=1;i<=n;i++)
    
        int x;
        cin>>x;
        if(x>ans)
        
            ans=x;
        
        else 
        break;
    
    cout<<ans<<endl;

C - The Kth Time Query

   题目描述:给你一个长度为n的数组A,给你Q个询问,每次询问(x,k)表示数字x在A中第k次出现的位置。若k大于x的数量或者A中不存在整数x输出−1。    

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=2e5+10;
map<int,int> mp;
map<PII,int> mm;
int main()

    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    
        int x;
        cin>>x;
        mp[x]++;
        mm[make_pair(x,mp[x])]=i;
    
    while(q--)
    
        int a,b;
        cin>>a>>b;
        if(mp[a]<b)
            cout<<"-1"<<endl;
            continue;
            
        else 
        cout<<mm[make_pair(a,b)]<<endl;
    
    return 0;

 D - Multiply and Rotate

两种操作将1变成N  一个是*a 另一个是将最后以后数变到最前面如 123变成312 

直接爆搜即可

#include<bits/stdc++.h>
using namespace std;
int ans=1e7;
int a,b;
map<int,int> mp;
int calc(int d)

    string c=to_string(d);
    int res=c[(c.size()-1)]-'0';
    for(int i=0;i<c.size()-1;i++)
    
        res=res*10+(c[i]-'0');
    
    return res;

void  dfs(int t,int cnt)

    if(t==b)
        ans=min(ans,cnt);
        return ;
    
    if(t>b*10) return ;
    mp[t]=true;
    dfs(t*a,cnt+1);
    if(t>=10&&t%10!=0)
    
        if(!mp[calc(t)])
        dfs(calc(t),cnt+1);
    
    return;

int main()
    
    cin>>a>>b;
    dfs(1,0);
    if(ans==1e7) cout<<"-1"<<endl;
    else cout<<ans<<endl;
    return 0;

E - MST + 1  

就是一个Kruskal的变形

#include<bits/stdc++.h>
using namespace    std;
int n,m,q;
const int N=2e6+10;
struct Edge
    int a,b,w,f;
    bool operator<(const Edge&j) const 
    
        return w<j.w;
     
edge[N];
int ans[N];
int p[N];
int find(int x)

    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];

int    main()

    cin>>n>>m>>q;
    for(int i=1;i<=n;i++) p[i]=i;
    for(int i=1;i<=m+q;i++)
    
        int a,b,w,f;
        cin>>a>>b>>w;
        edge[i]=a,b,w,-1;
        if(i>m) edge[i].f=i-m;
    
    sort(edge+1,edge+1+m+q);
    int cnt=0;
    for(int i=1;i<=m+q;i++)
    
        if(cnt==n-1) break;
        int a=edge[i].a;
        int b=edge[i].b;
        int w=edge[i].w;
        a=find(a),b=find(b);
        if(a!=b) 
        
                if(edge[i].f!=-1) 
                 
                ans[edge[i].f]=1;
                continue;
                
            p[a]=b;
            cnt++;
        
    
    for(int i=1;i<=q;i++)
    
        if(ans[i]==1) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    
    return 0;

以上是关于AtCoder Beginner Contest 235的主要内容,如果未能解决你的问题,请参考以下文章

AtCoder Beginner Contest 234

AtCoder Beginner Contest 115 题解

AtCoder Beginner Contest 154 题解

AtCoder Beginner Contest 103

AtCoder Beginner Contest 228

AtCoder Beginner Contest 242