整数划分———二分+前缀和
2023-12-15 20:02:42
牛牛有一个整数 n ,他想知道这个数字所有好的划分中字典序最小的划分方案是什么。
一个好的划分是一个正整数序列,序列中所有数字的和等于 n ,且序列中不存在相同的数。
Input
本题采用多组案例输入,第一行一个整数 T 代表案例组数。
每组案例中,输入一行一个整数代表 n (0 < n ≤ 1e6).
保证单个测试点中所有案例 n 的和不超过 1e6.
Output
对于每组案例,输出一行若干个正整数代表划分出字典序最小的序列,整数之间用空格分隔。
输入
3
4
7
10
输出
1 3
1 2 4
1 2 3 4
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int sum[10001];
void find()
{
for (int i=1;i<=10000;i++)
{
sum[i]=sum[i-1]+i;
}
}
int t,n;
signed main()
{
ios;
find();
cin>>t;
while (t--)
{
cin>>n;
int l=1,r=10000;
while (l<r)
{
int mid=l+r>>1;
if (sum[mid]>n) r=mid;
else l=mid+1;
}
for (int i=1;i<l-1;i++) cout<<i<<" ";
cout<<n-sum[l-2]<<endl;
}
return 0;
}
??
文章来源:https://blog.csdn.net/m0_74403543/article/details/135023557
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!