凑出和相等的k组数,玄学结论——hdu6616
[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的更多相关文章
- 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 ...
- 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)
第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...
- mysql 怎么查询出,分组后的总条数。。。也就是有多少组数。。。。怎么写
SELECT COUNT(*) AS 多少组数FROM( SELECT id FROM 表 GROUP BY id) subQuery;Mysql,有一个表含有以下字段,uid 发帖人id,title ...
- 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 ...
- 基于快速排序的数组划分:2组 3组 K组(sort color)大小写排序 · Partition Array
2组: [抄题]: 给出一个整数数组 nums 和一个整数 k.划分数组(即移动数组 nums 中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中 ...
- 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 ...
- 码农谷 找出N之内的所有完数
题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数". 编程序找出N之内的所有完数, ...
- 1001 数组中和等于K的数对
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A ...
- 蓝桥杯之K好数问题
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...
随机推荐
- 解决Zookeeper报错:conf is not executed because it is not in the whitelist的解决办法
1.echo wchp | nc localhost 2181 ,通过路径列出服务器 watch 的详细信息,且它会输出一个与 session 相关的路径.但是出现下面的错误. [root@xg61 ...
- bootstrap 好看的上传组件
<!DOCTYPE html> <html> <head> <title></title> <link rel="style ...
- Oracle - 单表查询相关
-- 单表查询 -- 查询表的所有数据, *代表所有 -- select * from [表名]; -- 查询表中指定字段的值 -- select [字段1], [字段2] ... from [表名] ...
- 【Flutter学习】基本组件之文本组件Text
一,概述 文本组件(Text)负责显示文本和定义显示样式, 二,继承关系 Object > Diagnosticable > DiagnosticableTree > Widget ...
- PHP反序列化漏洞研究
序列化 序列化说通俗点就是把一个对象变成可以传输的字符串 php serialize()函数 用于序列化对象或数组,并返回一个字符串.序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型和结 ...
- The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder i
参考资料: http://blog.csdn.net/competerh_programing/article/details/7377950 在创建Dialog的时候,出现: The method ...
- Serializable读写类操作
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...
- JUC源码分析-线程池篇(三)Timer
JUC源码分析-线程池篇(三)Timer Timer 是 java.util 包提供的一个定时任务调度器,在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. 1. Ti ...
- Centos光盘ISO安装过程再理解
ISO启动时的基本流程 vmlinuz -> 加载initrd.img -> 加载内核基本驱动 -> 挂载光盘至/run/install/repo -> 启动anaconda ...
- php ZipArchive 压缩整个文件夹
// Get real path for our folder $rootPath = realpath('folder-to-zip'); // Initialize archive object ...