[1,n]n个数分成k组,每组n/k个,问k组数和相等的解决方案

首先(1+n)*n/2判定一下是否可以被k整除

n/k为偶数时显然成立

n/k为奇数时每组数前三个很难配,我想了一种玄学的结论,也证明不出来为什么是对的。。

#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
int n,k;
vector<int>G[maxn];
pair<int,int>a[*];
int main(){
int t;cin>>t;
while(t--){
scanf("%d%d",&n,&k);
if(n==){puts("yes");cout<<<<endl;continue;} for(int i=;i<=n;i++)G[i].clear(); int tmp=n/k;//每组的个数
if(tmp%==){
puts("yes");
for(int i=;i<=n;i+=*k){
for(int j=i;j<=i+k-;j++)
G[j-i+].push_back(j);
for(int j=i+k;j<=i+*k-;j++)
G[k-(j-i-k)].push_back(j);
}
for(int i=;i<=k;i++){
cout<<G[i][];
for(int j=;j<n/k;j++)
cout<<" "<<G[i][j];
puts("");
}
}
else {//最后还剩下三组配不出来
if(tmp== || k%==){puts("no");continue;}//每组一个或组数为偶数 int step=k/,p=;
memset(a,,sizeof a);
for(int i=;i<=k;i++){
p+=step;
while(p>k)p-=k;
a[i+p+*k]=make_pair(i+k,p+*k);
}
int sum=(+*k)*/;
for(int i=;i<=k;i++){
G[i].push_back(i);
pair<int,int>b=a[sum-i];
G[i].push_back(b.first);
G[i].push_back(b.second);
} for(int i=*k+;i<=n;i+=*k){
for(int j=i;j<=i+k-;j++)
G[j-i+].push_back(j);
for(int j=i+k;j<=i+*k-;j++)
G[k-(j-i-k)].push_back(j);
}
puts("yes");
for(int i=;i<=k;i++){
cout<<G[i][];
for(int j=;j<n/k;j++)
cout<<" "<<G[i][j];
puts("");
} } }
}

凑出和相等的k组数,玄学结论——hdu6616的更多相关文章

  1. 373. Find K Pairs with Smallest Sums 找出求和和最小的k组数

    [抄题]: You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. D ...

  2. 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)

    第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...

  3. mysql 怎么查询出,分组后的总条数。。。也就是有多少组数。。。。怎么写

    SELECT COUNT(*) AS 多少组数FROM( SELECT id FROM 表 GROUP BY id) subQuery;Mysql,有一个表含有以下字段,uid 发帖人id,title ...

  4. 698. Partition to K Equal Sum Subsets 数组分成和相同的k组

    [抄题]: Given an array of integers nums and a positive integer k, find whether it's possible to divide ...

  5. 基于快速排序的数组划分:2组 3组 K组(sort color)大小写排序 · Partition Array

    2组: [抄题]: 给出一个整数数组 nums 和一个整数 k.划分数组(即移动数组 nums 中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中 ...

  6. 51Nod 1001 数组中和等于K的数对 Label:Water

    给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ...

  7. 码农谷 找出N之内的所有完数

    题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数". 编程序找出N之内的所有完数, ...

  8. 1001 数组中和等于K的数对

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A ...

  9. 蓝桥杯之K好数问题

    问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...

随机推荐

  1. js取整 - 优雅版(装逼必备)

    var a = 2.98; var z1 = ~~a; var z2 = a | 0; var z3 = a>>0; console.log(z1, z2, z3);     // 2, ...

  2. 查看crontab执行记录

    如果出现了crontab定时任务不执行的情况,首先需要定位问题,那么就需要通过日志来确定问题所在. crontab的日志位置一般位于/var/log/cron,利用下面的语句即可查看日志. tail ...

  3. ansible-继续普通用户权限运行

    ansible 远程以普通用户执行命令   1. ansible 10.0.0.1 -m raw -a "date" -u www 2.在ansible的主机配置文件中指定ssh_ ...

  4. 设计不严谨 - Get参数传日期空格未转义字符出现截断请求,后端无法处理

    设计不严谨 Get参数传递日期的时候有空格,如果未转义的话,会截断请求,然后后端无法处理. 从业务场景看 从产品的角度看,产品想要看每个活动的效果,而不是想知道技术. 角度不同,视觉不同 mark

  5. Android中让View匀速旋转

    项目需求,需要一个实现一个单帧的旋转动画,来提示当前进度,类似与圆圈型的progressbar. 首先定义anim文件: [html] view plaincopyprint? 1.     < ...

  6. Hbase节点的管理|服役和退役节点

    Base节点的管理 1.服役(commissioning) 当启动regionserver时,regionserver会向Hmaster注册并开始接收本地数据,开始的时候,新加入的节点不会有任何数据, ...

  7. homebrew -- mac os 系统下的 apt-get、yum

    linux下有很方便的包管理器如:apt-get.yum,mac下也有类似的工具:Homebrew 和 Fink.MacPort.Flink是直接编译好的二进制包,MacPorts是下载所有依赖库的源 ...

  8. [SDOI2015]排序 题解 (搜索)

    Description 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1<=i<=N),第i中 ...

  9. 动态队列实现-----C语言

    /***************************************************** Author:Simon_Kly Version:0.1 Date: 20170520 D ...

  10. 敏捷在《PMBOK指南》知识领域中的应用

    <PMOBOK指南>知识领域 敏捷工作过程中的应用 第四章 项目整合管理 迭代和敏捷方法能够促进团队成员以相关领域专家的身份参与整合管理.团队成员自行决定计划及其组件的整合方式.在适应型环 ...