hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
题意:
给你重量分别为1到n的n个石头,让你分成重量相等,数量也相等的k组,保证k是n的约数。问你能不能分配,如果能,输出具体的分配方案。
题解:
首先,如果1到n之和不能整除k,那么一定不能如题意分配。
否则一定能。
设m=n/k。m是每组分到的石头块数。我们把n块石头排成这样m*k的矩阵,假设12块石头,分成3组。
$\begin{bmatrix}
(1) & 2 & 3\\
(4) & 5 & 6\\
7 & 8 & (9)\\
10 &11 &(12)
\end{bmatrix}$
每组一定是从每行各拿一个。如果m为偶数,那么,第一个人从前一半的行里拿第一个,后一半的行里拿最后一个,第2个人拿前一半行的第二个,后一半行的倒数第二个,以此类推。
m为奇数的情况就比较难搞,假设15块石头,分成5组
将后两列之和构造成从上到下递增1,然后剩下的奇数个,一行构造成递增,一行构造成递减。
另外,k=1的时候需要特判,比赛最后半小时被卡测评,然后赛后知道因为这个点wa了,心酸。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int M = 1e5 + ;
int t;
int n, k;
LL sum;
void solve1(int n,int k){
int tot, cnt;
tot = n / k;
cnt = ;
printf("yes\n");
for (int i = ; i <= n / ; i++)
{
printf("%d %d", i, n - i + );
cnt += ;
if (cnt == tot)
{
printf("\n");
cnt = ;
}
else
{
printf(" ");
}
}
}
void solve2(int n,int k){
int tot = n / k;
int cnt = ;
int tot2 = +*k-k/;
int tmp = ;
printf("yes\n");
for (int i = ; i <= k; i++){
for (int j = ; j <= tot - ; j++){
if (j & ){
printf("%d ", n - (j - )*k - (i - ));
}else{
printf("%d ", n - j * k + + i - );
}
}
printf("%d %d\n", tmp, tot2 - tmp);
tot2++;
tmp += ;
if (tmp > k)tmp = ;
}
}
int main(){
scanf("%d", &t);
while (t--){
scanf("%d%d", &n, &k);
sum = (LL)n*(n + ) / ;
if(k==){
printf("yes\n");
for(int i=;i<=n;i++){
printf("%d ",i);
}
printf("\n");
}else if (sum%k){
printf("no\n");
continue;
}else{
if ((n / k) % ){
solve2(n,k);
}else{
solve1(n,k);
}
}
}
}
hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题的更多相关文章
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- Harvest of Apples (HDU多校第四场 B) (HDU 6333 ) 莫队 + 组合数 + 逆元
题意大致是有n个苹果,问你最多拿走m个苹果有多少种拿法.题目非常简单,就是求C(n,0)+...+C(n,m)的组合数的和,但是询问足足有1e5个,然后n,m都是1e5的范围,直接暴力的话肯定时间炸到 ...
- HDU 多校第四场题解
对于 D 题的原题意,出题人和验题人赛前都没有发现标算存在的问题,导致了许多选手的疑惑和时间的浪费,在此表示真诚的歉意! 预计难度分布: Easy - DJKL, Medium - ABCEG, Ha ...
- hdu多校第十场 1003 (hdu6693) Valentine's Day 贪心/概率
题意: 有许多物品,每个物品有一定概率让女朋友开心.你想让女朋友开心且只开心一次,让你挑一些物品,使得这个只开心一次的概率最大,求最大概率. 题解: 设物品i让女朋友开心的概率为$p_i$ 若你挑选了 ...
- hdu多校第八场 1003 (hdu6659) Acesrc and Good Numbers 数论/打表
题意: 对于某数k,若数字d在1-k中出现次数恰好为k,则称k为好数. 给定d,x,求x以内,对于d而言最大的好数.k范围1e18. 题解: 打表二分即可. 但是,1e18的表是没法打出来的,只能在o ...
- hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
题意: 给你一个数字拼图,问你数字拼图能否能复原成原来的样子. 题解: 数字拼图的性质是,逆序数奇偶相同时,可以互相转化,逆序数奇偶不同,不能互相转化. 因此统计逆序对即可. #include< ...
- hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
题意: 一个完全图,某两点边权为这两点编号之按位与,求最小生成树,输出字典序最小的. 题解: 如果点数不为$2^n-1$,则每一点均可找到一点,两点之间边权为0,只需找到该点二进制下其最左边的0是第几 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 牛客多校第四场sequence C (线段树+单调栈)
牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...
随机推荐
- js怎样判断一个数是质数
1.首先了解什么是质数(即:只能被1和它本身整除的数叫质数)主要代码 /** *判断该数是否为素数 */ function isPrimeNum(num){ ; i < num/+; i++) ...
- mysql 两张表取总合 和差集
SELECT id AS kid, NAME, IF (t1.kpi, t1.kpi, 0) AS kpi, t1.sort, STATUS, t1.kpi_idFROMform_kpi_nameLE ...
- delphi xe10 获取屏幕截图
//截取屏幕图片 function MakeScaleScreenshot(Sender: TControl): TBitmap; function GetScreenScale: Single; v ...
- 「题解」:07.16NOIP模拟T1:礼物
问题 A: 礼物 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼 ...
- 线段树区间离散化维护按秩合并并查集(可撤销)——牛客多校第八场E
模板题..去网上学了可撤销的并查集.. /* 给定一个无向图,边的属性为(u,v,l,r),表示<u,v>可以通过的size为[l,r] 求出有多少不同的size可以从1->n 把每 ...
- flutter 按钮单选封装
数字是自己先写死的 List list =[ { "title": "影视特效", , }, { "title": "室内设计&q ...
- HDU6181-求解次短路-A*或者dijkstra
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门 原题目描述在最下面. 次短路裸题. 思路: 在dijstra的过程过维护两个数组变量:\(dis1[],dis2[ ...
- 20140308 std::fill
std::fill 在[first, last)范围内填充值:std::fill(v.begin(), v.end(), 100);http://blog.csdn.net/ilysony/arti ...
- spark自定义函数之——UDF使用详解及代码示例
前言 本文介绍如何在Spark Sql和DataFrame中使用UDF,如何利用UDF给一个表或者一个DataFrame根据需求添加几列,并给出了旧版(Spark1.x)和新版(Spark2.x)完整 ...
- 好消息:Dubbo & Spring Boot要来了
Duboo和Spring Boot都是非常优秀的框架,现在它们要结合了.为了简化Dubbo开发集成,阿里Dubbo团队将发布基于Spring Boot的版本,可快速上手Dubbo的分布式开发,并提供了 ...