您的位置:首页 > 其它

uva 668 - Parliament(贪心)

2014-01-14 11:12 267 查看
题目链接:uva 668 - Parliament

题目大意:给出一个n,问最多用几个不同的数组成n,如果有个数相同的,输出从小到大排序的字典序最大的。

解题思路:首先找到一个序列,由2+3+...+x是恰好小于n的,然后将n - sum(x)平局分给这若干个数。

#include <stdio.h>
const int N = 1005;

int sum(int x) {
return (1 + x) * x / 2 - 1;
}

int main() {
int cas, n;
scanf("%d", &cas);
while (cas--) {
scanf("%d", &n);
int num
;
for (int i = 2; i <= n; i++) if (sum(i+1) > n) {
int s = (n - sum(i)) / (i - 1);
int t = (n - sum(i)) % (i - 1);

for (int j = 2; j <= i - t; j++) num[j] = j + s;
for (int j = i - t + 1; j <= i; j++) num[j] = j + s + 1;
printf("%d", num[2]);
for (int j = 3; j <= i; j++) printf(" %d", num[j]);
printf("\n");
break;
}
if (cas) printf("\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: