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 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章