C2. k-LCM (hard version)

19 篇文章 0 订阅
2 篇文章 0 订阅

C2. k-LCM (hard version)

题目

在这里插入图片描述

题目大意

给你一个数n,让你将其划分为k个数,并且这k个数中最小公倍数不得超过n/2。

思路

其实这道题目和简单版差别不大,简单版本中,如果n为奇数,那么你就输出n/2,n/2,1。那么在难版本中呢,k>3的部分输出1,剩下输出n/2,n/2,1,当然这里需要判断输出了k-3之后n为奇还为偶,在简单版本中,n为偶数时是不是先判断下,能不能被4整除如果能被4整除,那么就输出n/2,n/4,n/4,如果不能那就输出n/2-1,n/2-1,2,那么在这个基础之上先输出k-3个1,然后再判断能不能被4整除。

通过代码

#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")
using namespace std;
#define ll long long
#define sl(n) scanf("%lld",&n)
#define pl(n) printf("%lld",n)
#define sdf(n) scanf("%lf",&n)
#define pdf(n) printf("%.lf",n)
#define pE printf("\n")
#define ull unsigned long long
#define pb push_back
#define pre(n) for(ll i=1;i<=n;i++)
#define rep(n) for(ll i=n;i>=1;i--)
#define pi pair<ll,ll>
#define fi first
#define se second
int main()
{
	ll t,n,k,i;
	sl(t);
	while(t--){
	sl(n),sl(k);
	if(n%k==0){
		for(i=0;i<k;i++)cout<<n/k<<' ';
		cout<<endl;
		continue; 
}	
	if(k==3){
	
	if(n&1){
		cout<<n/2<<' '<<n/2<<' '<<'1'<<endl;
	}
	else {
		if(n/2%2)cout<<n/2-1<<' '<<n/2-1<<' '<<'2'<<endl; 
		else cout<<n/2<<' '<<n/4<<' '<<n/4<<endl;
	}
	}
	else{
		for(i=0;i<k-3;i++){
			cout<<'1'<<' '; 
		}
		n-=(k-3);
		if(n&1){
		cout<<n/2<<' '<<n/2<<' '<<'1'<<endl;
	}
	else {
		if(n/2%2)cout<<n/2-1<<' '<<n/2-1<<' '<<'2'<<endl; 
		else cout<<n/2<<' '<<n/4<<' '<<n/4<<endl;
	}
	}
	}
	
	return 0;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值