AtCoder Beginner Contest 161

Posted kanoon

tags:

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

AtCoder Beginner Contest 161

第一次打AtCoder的比赛,因为是日本的网站终于不用倒时差了233。

A - ABC Swap

可以直接按照交换后的顺序输出。

技术图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    cout<<c<< <<a<< <<b;
    return 0;
}
View Code

B - Popular Vote

最后一个测试点会卡取下整的误差,可以通过变换不等式来避免。

技术图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;cin>>n>>m;
    int a[n];for(int &i:a) cin>>i;
    int sum=accumulate(a,a+n,0);
    int cnt=0;
    for(int i:a)
        if(4*m*i>=sum) ++cnt;
    cout<<(cnt>=m?"Yes":"No")<<"
";
    return 0;
}
View Code

C - Replacing Integer

$N$ 通过不断地减 $K$ 最后一定会在 $[0,K)$ 之内,此时输出 $min(N,K-N)$ 即可。

技术图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n,k;cin>>n>>k;
    cout<<min(n%k,k-n%k);
    return 0;
}
View Code

D - Lunlun Number

对每个数的最后一位进行广搜,存储每次得到的值,排序输出即可。

技术图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    queue<long long> q;
    for(long long i=1;i<=9;i++)
        q.push(i);

    vector<long long> ans;
    while(ans.size()<2e5)
    {
        long long n=q.front();
        ans.push_back(n);
        q.pop();

        long long m=n%10;
        
        if(m>0) q.push(n*10+m-1);
        if(m<9) q.push(n*10+m+1);
        q.push(n*10+m);
    }

    sort(ans.begin(),ans.end());
    long long k;cin>>k;
    cout<<ans[k-1];
    
    return 0;
}
View Code

E - Yutori

正反模拟一下,如果至少有一次最终可选择的天数大于 $K$,那么每一天都不是必须工作的,否则取二者的交集。

技术图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,k,c;cin>>n>>k>>c;
    string s;cin>>s;

    set<int> st1,st2;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]==x) continue;
        st1.insert(i);
        i+=c;
    }
    for(int i=s.size()-1;i>=0;i--)
    {
        if(s[i]==x) continue;
        st2.insert(i);
        i-=c;
    }

    if(st1.size()>k||st2.size()>k) ;
    else{
        for(int i:st1)
            if(st2.count(i)) cout<<i+1<<"
";
    }

    return 0;
}
View Code

F - Division or Substraction

若 $N$ 最终可以变为 $1$,$K$  需要满足:$frac{N}{K^n}$${\%K=1}$。

  • 当 $n=0$ 时,$N\%K=1$,此时的 $K$ 为 $N-1$ 的因子。
  • 当 $n>0$ 时,只有枚举不大于 $sqrt{N}$ 的因子K,才有可能得到 $frac{N}{K^n}$${\%K=1}$。

最后再讨论一下 $K=1$ 和 $K=N$ 的情况即可。 

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll n;cin>>n;

    set<ll> st;
    for(ll i=2;i*i<=n;i++){
        if(n%i==0){
            ll t=n;
            while(t%i==0) t/=i;
            if(t%i==1) st.insert(i);
        }
    }
    for(ll i=1;i*i<=n-1;i++){
        if((n-1)%i==0){
            st.insert(i);
            st.insert((n-1)/i);
        } 
    }
    st.erase(1);
    st.insert(n);

    cout<<st.size()<<"
";
    
    return 0;
}
View Code

 

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

AtCoder Beginner Contest 234

AtCoder Beginner Contest 115 题解

AtCoder Beginner Contest 154 题解

AtCoder Beginner Contest 103

AtCoder Beginner Contest 228

AtCoder Beginner Contest 242