【HDOJ6616】Divide the Stones(构造)
题意:给定n堆石子,第i堆的个数为i,要求构造出一种方案将其分成k堆,使得这k堆每堆数量之和相等且堆数相等
保证k是n的一个约数
n<=1e5
思路:先把非法的情况判掉
n/k为偶数的方法及其简单
n/k为奇数就先构造出n=3k的情况然后减掉,剩下的就是n/k为偶数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
//typedef pair<ll,ll>P;
#define N 1000010
#define M 200010
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1 const int MOD=1e9+,inv2=(MOD+)/;
double eps=1e-;
int INF=1e9;
int inf=0x7fffffff;
int dx[]={-,,,};
int dy[]={,,-,}; VI c[N]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} int main()
{
int cas=read();
while(cas--)
{
int n=read(),k=read();
ll s=1ll*n*(n+)/;
if(s%k>||k==n&&k>)
{
printf("no\n");
continue;
}
printf("yes\n");
if(n==&&k==)
{
printf("1\n");
continue;
}
int t=n/k;
rep(i,,k) c[i].clear();
if(t>=&&t%==)
{
int x=k/,m=n;
rep(i,,k)
{
c[i].pb(m);
m--;
}
rep(i,x+,k)
{
c[i].pb(m);
m--;
}
rep(i,,x)
{
c[i].pb(m);
m--;
}
int y=m;
per(i,k,x+)
{
c[i].pb(m);
m-=;
}
m=y-;
per(i,x,)
{
c[i].pb(m);
m-=;
}
n-=*k;
}
t=;
rep(i,,n/)
{
t++;
if(t==k+) t=;
c[t].pb(i);
}
t=;
per(i,n,n/+)
{
t++;
if(t==k+) t=;
c[t].pb(i);
} rep(i,,k)
{
rep(j,,(int)c[i].size()-) printf("%d ",c[i][j]);
printf("\n");
}
}
return ;
}
【HDOJ6616】Divide the Stones(构造)的更多相关文章
- HDU多校1003-Divide the Stones(构造)
Problem Description There are n stones numbered from 1 to n.The weight of the i-th stone is i kilogr ...
- [2019杭电多校第四场][hdu6616]Divide the Stones
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6616 题意是说n个数分别为1-n,将n个数分成k堆,能否满足每堆个数相等,数值之和相等.保证n%k=0 ...
- hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
题意: 给你重量分别为1到n的n个石头,让你分成重量相等,数量也相等的k组,保证k是n的约数.问你能不能分配,如果能,输出具体的分配方案. 题解: 首先,如果1到n之和不能整除k,那么一定不能如题意分 ...
- 2019 Multi-University Training Contest 4.Divide the Stones(贪心)
题意:给你n和k (k|n) 有n个数 第i个数权值为i 要你求权值相同且分成k组 且每组的个数为n/k 思路:恶心构造题,首先对于总权值不能分为k份的 显然不能分成 然后 我们把n/k 分奇偶 我们 ...
- Codeforces 1270E - Divide Points(构造+奇偶性)
Codeforces 题目传送门 & 洛谷题目传送门 显然,直接暴力枚举是不可能的. 考虑将点按横纵坐标奇偶性分组,记 \(S_{i,j}=\{t|x_t\equiv i\pmod{2},y_ ...
- HDU 6616 Divide the Stones
目录 题面 中文题意 比赛惨状 我的走不通的思路 \(m\)是偶数的情况 \(m\)是奇数的情况 题解的思路 另一些思路 源代码 题面 Time limit 3000 ms Memory limit ...
- 2019dx#4
Solved Pro.ID Title Ratio(Accepted / Submitted) 1001 AND Minimum Spanning Tree 31.75%(1018/3206) ...
- 2019 Multi-University Training Contest 4
A. AND Minimum Spanning Tree solved by rdc 21min -1 数组开小了,解体了一次. 题意 给一棵树,两点之间边权为 x & y,求最小生成树. 做 ...
- HDU 全国多校第四场 题解
题解 A AND Minimum Spanning Tree 参考代码: #include<bits/stdc++.h> #define maxl 200010 using namespa ...
随机推荐
- 【USACO18JAN】MooTube
原文链接:https://blog.csdn.net/Patrickpwq/article/details/86656456 给定一棵n个点的树(n=1e5),有边权, 两点间距离定义为两点路径上的 ...
- [USACO 2008 Jan. Silver]架设电话线 —— 最短路+二分
一道图论的最短路题.一开始连最短路都没想到,可能是做的题太少了吧,完全没有思路. 题目大意: FJ的农场周围分布着N根电话线杆,任意两根电话线杆间都没有电话线相连.一共P对电话线杆间可以拉电话线,第i ...
- 应用安全 - 路由器 - D-LINK - 漏洞汇总
D-Link D-Link DSL-2750B任意命令执行漏洞 CVE-2019-16920 影响范围 DIR- DIR-866L DIR- DHP- CVE-2017-7405 Date 类型 嗅探 ...
- == 和 equals的区别
== 和 equals的区别 基本类型:== 比较的是两个变量的面值大小 对象对象: 比较的是内存地址 特例: String a = "abc" String b = &qu ...
- Html mate标签的常见功能
一.常用的功能 1.禁止屏幕缩放 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, us ...
- oracle--优化思路
- Vue 基础 day04
什么是路由 后端路由: 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器的资源: 前端路由: 对于单页面应用程序来说,主要是通过URL中的hash(#)来实现不同页面之间的跳转 ...
- Elasticsearch安装及遇到的问题(CentOS 7.3 64位)
Elasticsearch安装 使用root用户创建一个其他用户,(elasticsearch不能在root账户下安装) # 添加一个名字是es工作组 groupadd es # 添加用户es设置密码 ...
- [常用类]Number & Math 类(转载)
下面的表中列出的是 Number & Math 类常用的一些方法: 序号 方法与描述 1 xxxValue() 将 Number 对象转换为xxx数据类型的值并返回. 2 compareTo( ...
- Python 函数知识总汇
函数在一个程序起到很重要的作用,那么如何学好函数呢,那函数有什么内容的,总结一下函数的知识归类 1,函数定义 def 函数名(): print("...") 2,函数返回值 re ...