题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6616

题意是说n个数分别为1-n,将n个数分成k堆,能否满足每堆个数相等,数值之和相等。保证n%k=0。

构造题神马的太烦了略略略

我的构造方式是这样的,先判断每堆的个数,然后分奇偶讨论一下

每堆个数为偶时:

可以将n个数分成n/2对,如n为12时,分成1-12,2-11,3-10,4-9,5-8,6-7这样。

然后根据每堆的个数将n/2对分别放入每堆中。

如n=12,k=3时:

第一堆为1-12,2-11。

第二堆为3-10,4-9。

第三堆为5-8,6-7。

这样很好想。

每堆个数为奇时:

先用蛇型方式构造出k堆的前m-2项(m为每堆的个数)

如n=15,k=3时:

1 6 7 X X

2 5 8 X X

3 4 9 X X

三堆分别如上。

然后发现每堆现在的和为14 15 16单调递增。所以我们用剩余元素构造出一个单调递减的序列即可。

剩余元素为10 11 12 13 14 15,我们用15-11,13-12,14-10,构造出一个递减序列即可。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
int main() {
int t;
scanf("%d", &t);
while (t--) {
ll n, m, k;
scanf("%lld%lld", &n, &k);
m = n / k;
ll sum = n * (n + ) / ;
if (k == ) {
printf("yes\n");
for (int i = ; i <= n; i++)
printf("%d%c", i, i == n ? '\n' : ' ');
}
else if (sum%k) {
printf("no\n");
continue;
}
else {
if (m & ) {
int num = ;
int tot = sum / k;
int tmp = n;
printf("yes\n");
for (int i = ; i <= k; i++) {
for (int j = ; j <= m - ; j++) {
int x;
if (j & )
printf("%d ", x = (j - )*k + i);
else
printf("%d ", x = j * k - i + );
if (i == )
tot -= x;
}
printf("%d %d\n", tmp, tot - tmp);
tot--;
tmp -= ;
if (tmp < n - k)tmp = n - ;
}
}
else {
int cnt = ;
printf("yes\n");
for (int i = ; i <= n / ; i++) {
cnt += ;
printf("%d %d", i, n - i + );
if (cnt == m) {
printf("\n");
cnt = ;
}
else
printf(" ");
}
}
}
}
}

[2019杭电多校第四场][hdu6616]Divide the Stones的更多相关文章

  1. [2019杭电多校第四场][hdu6623]Minimal Power of Prime

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6623 题目大意为求一个数的唯一分解的最小幂次.即120=23*31*51则答案为1. 因为数字太大不能 ...

  2. [2019杭电多校第四场][hdu6621]K-th Closest Distance(主席树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6621 题意为求区间[l,r]内第k小|a[i]-p|的值. 可以二分答案,如果二分的值为x,则判断区间 ...

  3. [2019杭电多校第四场][hdu6614]AND Minimum Spanning Tree(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6614 题目大意是有一张n个点的完全图,n个点点权为1-n,边权为两点点权按位与(&).求最小生 ...

  4. 2019杭电多校第四场hdu6623 Minimal Power of Prime

    Minimal Power of Prime 题目传送门 解题思路 先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为 ...

  5. 2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)

    K-th Closest Distance 题目传送门 解题思路 二分答案+主席树 先建主席树,然后二分答案mid,在l和r的区间内查询[p-mid, p+mid]的范围内的数的个数,如果大于k则说明 ...

  6. 杭电多校第四场 E Matrix from Arrays

    Problem E. Matrix from Arrays Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 ...

  7. 杭电多校第四场 Problem K. Expression in Memories 思维模拟

    Problem K. Expression in Memories Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262 ...

  8. 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望

    题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...

  9. 2019 杭电多校第八场 HDU - 6665 Calabash and Landlord 两矩形分平面

    题意 给出两个矩形,问这两个矩形把平面分成了几部分. 分析 不需要什么高级技能,只需 “简单” 的分类讨论. (实在太难写了,对拍找出错误都不想改 推荐博客,其中有个很好的思路,即只讨论答案为2,3, ...

随机推荐

  1. Redis 启动警告解决

    Redis 启动警告解决[转] [root@centos224]# service redisd start 21985:M 24 Nov 04:07:20.376 * Increased maxim ...

  2. [CF1142E] Pink Floyd

    传送门 题意:一个\(n\)个点的竞赛图,给出\(m\)条红色的边,其方向确定,其余边均为绿色,方向未知.你可以询问不超过\(2n\)次,每次询问一条绿色边的方向.要求找到一个点\(x\),使得\(x ...

  3. Rails3:使用bundler管理gems

    Rails3:使用bundler管理gems bundler 是一套为了 Rails3 所打造的全新 Gem dependencies 管理工具:一套基于 Rubygems 的更高阶套件管理工具,适合 ...

  4. java -jar 和 java -cp 区别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/12022527.html Project Directory SRC MainTest.java pac ...

  5. layui下拉框右边图标动画,不要动画

    /* 取消动画 / .layui-form-selected .layui-edge { margin-top: -3px; -webkit-transform: rotate(0deg); tran ...

  6. 【leetcode】1108. Defanging an IP Address

    题目如下: Given a valid (IPv4) IP address, return a defanged version of that IP address. A defanged IP a ...

  7. FileUtils (从磁盘下载,从网络下载)

    public class FileUtils { /** * realPath 磁盘路径 D://project/download/ * urlPath 后半部分路径 具体根据业务需求,例如:WEB- ...

  8. apicloud直接上传图片

    function getPicture() { api.confirm({ title : "提示", msg : "选择图片", buttons : [&qu ...

  9. BigDecimal.setScale 处理java小数点[转]

    BigDecimal.setScale()方法用于格式化小数点setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多余 ...

  10. Codeforces Round #587 (Div. 3) F. Wi-Fi(单调队列优化DP)

    题目:https://codeforces.com/contest/1216/problem/F 题意:一排有n个位置,我要让所有点都能联网,我有两种方式联网,第一种,我直接让当前点联网,花费为i,第 ...