Acwing第 21 场周赛完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing第 21 场周赛完结相关的知识,希望对你有一定的参考价值。

这场比赛是有史以来,最拉的一场。开始太慌了,第一题没看数据范围直接开始写。wa了四发后,才发现可以暴力。
第二题超时的模拟,规律一直没有找出来。总之,状态及其不好掉了大分。无语。

3997. 整数幂【签到】

https://www.acwing.com/activity/content/competition/problem_list/76/

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
int t;
int main(void)
{
    cin>>t;
    while(t--)
    {
        LL k,l; cin>>k>>l;
        bool flag=0;
        for(int i=0;i<=31;i++) if(pow(k,i)==l) flag=1;
        if(flag) puts("YES");
        else puts("NO");
     }
	return 0;
}

3998. 变成1【难度: 一般 / 知识点: 模拟】


https://www.acwing.com/problem/content/description/4001/
分为两种情况:

  • 为奇数的情况: 只要从后往前找,找到第一个零,将其置为1,其后的全部置为0即可。
  • 偶数的情况: 只要删除最后一位即可
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    string s; cin>>s;
    int cnt=0;
    while(s.size()>1)
    {
        int n=s.size()-1;
        if(s[n]=='0') s.erase(n);//偶数
        else //奇数
        {
            for(int i=n;i>=0;i--)
            {
                if(s[i]=='0')//找到第一个0将其置为1
                {
                    s[i]='1';
                    break;
                }
                s[i]='0';
            }
        }
        cnt++;
    }
    if(s[0]=='0') cnt++;
    cout<<cnt<<endl;
    return 0;
}

3999. 最大公约数【难度: 中 / 知识点: 数论 欧拉函数】‘


https://www.acwing.com/problem/content/4002/

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL gcd(LL a,LL b) {return b?gcd(b,a%b):a;}
LL solve(LL m)
{
    LL res=m;
    for(int i=2;i<=m/i;i++)
    {
        if(m%i==0)
        {
            res=res/i*(i-1);
            while(m%i==0) m/=i;
        }
    }
    if(m!=1) res=res/m*(m-1);
    return res;
}
int main(void)
{
    LL t; cin>>t;
    while(t--)
    {
        LL a,m; cin>>a>>m;
        m=m/gcd(a,m);
        cout<<solve(m)<<endl;
    }
    return 0;
}

以上是关于Acwing第 21 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章

Acwing第 31 场周赛完结

Acwing第 36 场周赛完结

Acwing第 56 场周赛完结

Acwing第 32 场周赛完结

Acwing第 59 场周赛完结

Acwing第 35 场周赛完结