Acwing第 57 场周赛【未完结】

懒了,只做俩题。第三题懒的看了
https://www.acwing.com/activity/content/competition/problem_list/1974/

4485. 比大小

#include<bits/stdc++.h> 
using namespace std;
const int N=1e5*5+10;
typedef long long int LL;
LL n,m,s1,s2,a[N],b[N];
int main(void)
{
    
    
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],s1+=a[i];
	for(int i=1;i<=n;i++) cin>>b[i],s2+=b[i];
	if(s1>=s2) puts("Yes");
	else puts("No");
	return 0;
}

4486. 数字操作【数学】

在这里插入图片描述
数学题,刚开始以为dfs或者最短路建图可做。后来一想就是数学思维题。
经过操作后最小的数一定是这些质数因子的乘积,那么关键问题就是在于求次数。

#include<bits/stdc++.h> 
using namespace std;
void solve()
{
    
    
	int n; cin>>n;
	if(n==1)
	{
    
    
		puts("1 0");
		return;
	}
	vector< pair<int,int> >ve;
	int ans=1,cnt=0,flag=0,maxv=0;
	for(int i=2;i<=n/i;i++) 
	{
    
    
		int s=0;
		while(n%i==0) s++,n/=i;
		if(s) ve.push_back({
    
    i,s}),ans*=i;
	}
	if(n!=1) ve.push_back({
    
    n,1}),ans*=n;
	map<int,int>mp,st;
	for(int i=1;i<=25;i++) mp[pow(2,i)]++;
	for(int i=0;i<ve.size();i++)
	{
    
    
		st[ve[i].second]++;
		if(!mp[ve[i].second]) flag=1;//不是 2,4,8这种数
		maxv=max(maxv,ve[i].second);
	}
	for(int i=1;i<=25;i++) 
	{
    
    
		if(pow(2,i)>=maxv) 
		{
    
    
			cnt=i;
			break;
		}
	}
	if(st.size()!=1) flag=1;//数的种类多于1
	if(maxv==1) cout<<ans<<" "<<0<<endl;//已经是最简的了
	else cout<<ans<<" "<<cnt+flag; 
}
int main(void)
{
    
    
	solve();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/125465786