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;
}