题目链接: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,构造出一个递减序列即可。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 using namespace std;
 7 typedef long long ll;
 8 const int maxn = 1e5 + 10;
 9 int main() {
10     int t;
11     scanf("%d", &t);
12     while (t--) {
13         ll n, m, k;
14         scanf("%lld%lld", &n, &k);
15         m = n / k;
16         ll sum = n * (n + 1) / 2;
17         if (k == 1) {
18             printf("yes\n");
19             for (int i = 1; i <= n; i++)
20                 printf("%d%c", i, i == n ? '\n' : ' ');
21         }
22         else if (sum%k) {
23             printf("no\n");
24             continue;
25         }
26         else {
27             if (m & 1) {
28                 int num = 0;
29                 int tot = sum / k;
30                 int tmp = n;
31                 printf("yes\n");
32                 for (int i = 1; i <= k; i++) {
33                     for (int j = 1; j <= m - 2; j++) {
34                         int x;
35                         if (j & 1)
36                             printf("%d ", x = (j - 1)*k + i);
37                         else
38                             printf("%d ", x = j * k - i + 1);
39                         if (i == 1)
40                             tot -= x;
41                     }
42                     printf("%d %d\n", tmp, tot - tmp);
43                     tot--;
44                     tmp -= 2;
45                     if (tmp < n - k)tmp = n - 1;
46                 }
47             }
48             else {
49                 int cnt = 0;
50                 printf("yes\n");
51                 for (int i = 1; i <= n / 2; i++) {
52                     cnt += 2;
53                     printf("%d %d", i, n - i + 1);
54                     if (cnt == m) {
55                         printf("\n");
56                         cnt = 0;
57                     }
58                     else
59                         printf(" ");
60                 }
61             }
62         }
63     }
64 }

转载于:https://www.cnblogs.com/sainsist/p/11349004.html

[2019杭电多校第四场][hdu6616]Divide the Stones相关推荐

  1. 2019杭电多校 第七场 Kejin Player 6656(求期望值)

    2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...

  2. 2019杭电多校第9场1002 Rikka with Cake HDU6681

    2019杭电多校第9场1002 Rikka with Cake HDU6681 题意:给你若干个点按上下左右切割平面,最后问平面内有几块被切割开来. 解法1:红黑树+思维+贪心 A:根据欧拉定理可以得 ...

  3. 杭电多校第四场-H- K-th Closest Distance

    题目描述 You have an array: a1, a2, , an and you must answer for some queries. For each query, you are ...

  4. 【2019.08.21】2019杭电多校第十场

    补题地址:http://acm.hdu.edu.cn/listproblem.php?vol=58 题号:6691-6701 1001: 1002: 1003:✅ 1004: 1005:✅ 1006: ...

  5. 2019 杭电多校第六场 题解

    比赛记录 注意随机数据 ,1-n排列这种,一般都有啥暴力重构之类的方法,期望重构次数很少之类的 1005也是这样,因为n^2但只有n个值有数,所以就可以n^2logn 题解 1001 Salty Fi ...

  6. 2019杭电多校第三场 6608 Fansblog(威尔逊定理+miller_rabin素性测试)

    Problem Description 传送门 Farmer John keeps a website called 'FansBlog' .Everyday , there are many peo ...

  7. 2019 杭电 多校第3场 1006 Fansblog (HDU 6608)

    题目链接 题解: 用威尔逊定理变换,然后求逆元. 代码: #include <bits/stdc++.h> using namespace std; typedef long long l ...

  8. hdu 6656 2019杭电多校第7场 期望题

    设f[i]为从i升级到i+1期望需要的金钱,由于每级都是能倒退或者升级到i+1,所以询问从l,r的期望金钱可以直接前缀和,那么推导每一级升级需要的期望钱也可以用前缀和推导 设sum[i]=f[1]+f ...

  9. 2019杭电多校第7场 K Kejin Player HDU 6656(数学推导)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题目大意:对于每一个等级,可以花ai元,有pi概率升级,如果升级失败就退到xi级,问从li级升到 ...

  10. 2019杭电多校第七场 HDU - 6656 Kejin Player 期望

    题目链接:https://vjudge.net/problem/HDU-6656 题解: 维护一个前缀sum[i] : 从1到 i 的期望 第 i 到达 i + 1是:ai + (1 - r[i] / ...

最新文章

  1. iOS支付宝支付集成
  2. linux下大于2TB硬盘格式化及挂载,linux下大于2T的分区方法
  3. 【江苏】2021年下半年软考报考时间及通知
  4. 推荐CVer的总结 | 性能最强的One-stage目标检测算法
  5. 【Linux】一步一步学Linux——as命令(260)
  6. 计算机网络——CSMA/CD最小帧长相关题目
  7. 记一次神奇的sql查询经历,group by慢查询优化(已解决)
  8. IntelliJ IDEA 的项目配置和Web部署,终于搞懂了!
  9. python学习——格拉布斯准则实现
  10. B4A-Basic4android
  11. Robomaster视觉教程(二)Win10+VS201x+Opencv3.4.x环境搭建
  12. 123页6万字XX市新型智慧城市顶层设计方案
  13. 如何在IPv6下观看网络电视直播
  14. 打破汽车零部件企业供应链壁垒,数商云SCM供应链系统实现一体化采购协同
  15. Python3,4行代码给图片加美颜,拍照再也不需要开美颜滤镜了。
  16. Java之非对称加密
  17. 如何从Apple电子钱包中删除旧登机牌
  18. 设计模式----仲裁者模式(Mediator Pattern)例题
  19. 百度收购快钱?消息人士说不大可能
  20. Mac 安装LaTeX教程 mactex+sublime+skim

热门文章

  1. Input Output
  2. Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案...
  3. Android开发 MediaPlayer入门_播放本地视频
  4. 打造kubernetes 高可用集群(nginx+keepalived)
  5. (41)zabbix监控api接口性能及可用性 天气预报api为例
  6. mysql 查询的关键词的执行顺序
  7. SpringRMI解析2-RmiServiceExporter逻辑脉络
  8. 事务复制中的msrepl_ccs
  9. 浪潮gs开发平台学习---平台快速开发入门
  10. Vs 2008 sp1更新后出现的问题!