凑出和相等的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 ...
随机推荐
- C++中创建对象的时候加括号和不加括号的区别(转)
c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...
- 初试avalon
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【JZOJ3920】噪音
description FJ有M个牛棚,编号1至M,刚开始所有牛棚都是空的.FJ有N头牛,编号1至N,这N头牛按照编号从小到大依次排队走进牛棚,每一天只有一头奶牛走进牛棚.第i头奶牛选择走进第p[i] ...
- javascript null vs undefined
这个是很古老的问题了. 一直存在争议,有些人认为,很多语言没用 undefined 也活的好好,为啥要 undefined 呢. 那有了 undefined 是否还需要 null 呢 ? typesc ...
- python自动化测试-使用第三方python库技术实现
转载自https://www.cnblogs.com/beer/p/5418471.html
- PHP FILTER_VALIDATE_EMAIL 过滤器
定义和用法 FILTER_VALIDATE_EMAIL 过滤器把值作为 e-mail 地址来验证. Name: "validate_email" ID-number: 274 实例 ...
- 【LeetCode 2】两数相加
描述 [题解] 模拟高精度的加法. 用x来记录前面的进位就好. [代码] /** * Definition for singly-linked list. * struct ListNode { * ...
- BZOJ 1927: [Sdoi2010]星际竞速(费用流)
传送门 解题思路 仿照最小路径覆盖问题,用费用流解决此题.最小路径覆盖问题是拆点连边后用\(n-\)最大匹配,这里的话也是将每个点拆点,源点向入点连流量为\(1\),费用为\(0\)的边,向出点连流量 ...
- PHP导出excel word的代码
php导出为word原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方法.安装过office的服务器可以调用一个叫wo ...
- Docker、Kubernetes(k8s)与OpenShift之间的关系
openshift是基于容器计数搭建的一个云平台.这里的容器技术即包括Docker和Kunbernetes.如下图所示,OPenshift底层以Docker作为容器引擎驱动,以Kubernetes作为 ...