zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Acwing第 34 场周赛【完结】

AcWing 34 周赛 完结
2023-09-11 14:15:52 时间

4209. 三元组【签到】

在这里插入图片描述
https://www.acwing.com/problem/content/4212/

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N],c[N],n;
int main(void)
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i]>>b[i]>>c[i],a[0]+=a[i],b[0]+=b[i],c[0]+=c[i];
	if(!a[0]&&!b[0]&&!c[0]) puts("YES");
	else puts("NO");
	return 0;
}

4210. 数字【进制转换】

在这里插入图片描述
https://www.acwing.com/problem/content/4213/

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL sum,n;
LL solve(int n,int x)
{
    LL sum=0;
    while(n) sum+=n%x,n/=x;
    return sum;
}
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
int main(void)
{
    cin>>n;
    for(int i=2;i<=n-1;i++) sum+=solve(n,i);
    LL temp=gcd(sum,n-2);
    cout<<sum/temp<<"/"<<(n-2)/temp;
	return 0;
}

4211. 序列重排【dfs爆搜】

在这里插入图片描述
https://www.acwing.com/problem/content/4214/

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=110;
LL a[N],n,flag;
map<LL,int>mp; 
vector<LL>path,ans;
void dfs(LL u,int index)
{
	if(index==n-1)
	{
		flag=1;ans=path;
		return;
	}
	if(mp[u*2]) 
	{
		path.push_back(u*2),mp[u*2]--;
		dfs(u*2,index+1);
		path.pop_back(),mp[u*2]++;
	}
	if(u%3==0&&mp[u/3])
	{
		path.push_back(u/3),mp[u/3]--;
		dfs(u/3,index+1);
		path.pop_back(),mp[u/3]++;
	}
}
int main(void)
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i],mp[a[i]]++;
	for(int i=0;i<n;i++) //枚举每一个数作为开头
	{
		path.clear(),path.push_back(a[i]);
		mp[a[i]]--;
		dfs(a[i],0);
		if(flag)
		{
			for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
			return 0;
		}
		mp[a[i]]++;
	}
	return 0;
}

你会发现2因子的数量只会越来越多,3因子的数量只会越来越少。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5;
struct node{LL a,x,y;}Node[N];
int n;
int get(LL x,LL m)
{
	int cnt=0;
	while(m%x==0) cnt++,m/=x;
	return cnt;
}
bool cmp(node a,node b)
{
	if(a.x!=b.x) return a.x<b.x;
	return a.y>b.y;
}
int main(void)
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>Node[i].a;
	for(int i=0;i<n;i++)
	{
		Node[i].x=get(2,Node[i].a);
		Node[i].y=get(3,Node[i].a);
	}
	sort(Node,Node+n,cmp);
	for(int i=0;i<n;i++) cout<<Node[i].a<<" ";
	return 0;
}