您的位置:首页 > 产品设计 > UI/UE

HDU 5916 - Harmonic Value Description

2017-11-30 20:08 330 查看
题目大意:有t个样例,每个样例,输入n和k,其中n代表一段序列为1,2,3...n的标准序列,k代表第k小的序列。输出这个序列,序列的值根据公式计算,公式的意思为每相邻两个数的最大公约数的累积和。

解题思路:标准序列必然为最小序列且值为n-1(同值序列不唯一),易发现相邻的奇数最小公约数也为1,而相邻的偶数最小公约为为2,根据题目又发现2k≤n,也就是所可能求最大的序列的值为n+2k-2,而每次将相邻的两个偶数放在前面就会使得值增加一,排名就会靠近一位。最多将所有偶数放前面就能达到极限。

ac代码:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
int t, n, k, cnt = 1, vis[10005];
cin >> t;
while (t--){
scanf("%d%d", &n, &k);
memset(vis, 0, sizeof(vis));
printf("Case #%d:", cnt++);
for (int i=1; i<=k; i++){
printf(" %d", 2*i);
vis[2*i] = 1;
}
for (int i=1; i<=n; i++)
if (!vis[i])
printf(" %d", i);
printf("\n");
}
return 0;
}

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