题目链接:(数据加强后wa了)

hdu 5355


题目大意:

给出一个蛋糕。切成1~n大小的n块。问是否能在不继续分割的情况下拼凑出m等份。


题目分析:

  • 首先我们是可以知道每份蛋糕的尺寸的,利用n*(n+1)/2m可以算出来,假设不能整除的话,那么一定无解。

  • 然后我们考虑怎样构造一组解,对于一块蛋糕,我想到了一个贪心策咯,尽量选择最大块的蛋糕,由于假设能选可是不选这块蛋糕,那么也一定是通过选取小块的蛋糕来拼凑出这块蛋糕的大小,可是假设小的拼凑出了这块,那么就不能用于拼凑其它的蛋糕,显然选择最大的这块是最优的,由于他不可能被用来拼凑出其它的蛋糕。所以当前选取它不会造成其它的蛋糕拼凑受影响,所以我们这样选取一定是正确的。

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm> using namespace std;
typedef long long LL;
int t;
LL n,m;
vector<int> v[20];
int mark[100007]; int main ( )
{
scanf ( "%d" , &t );
while ( t-- )
{
memset ( mark , 0 , sizeof ( mark ));
for ( int i = 0 ; i < 20 ; i++ )
v[i].clear();
scanf ( "%I64d%I64d" , &n , &m );
LL ans = n*(n+1)/2;
LL num = ans/m;
if ( ans%m || num < n )
{
puts ( "NO" );
continue;
}
LL r = n;
int i;
for ( i = 0 ; i < m ; i++ )
{
//cout <<n << " " << num << " "<< i << " " << r << endl;
LL temp = num;
bool flag = true;
while ( mark[r] && r > 1 ) r--;
while ( temp >= r && !mark[r] )
{
v[i].push_back ( r );
mark[r] = true;
temp -= r;
r--;
if ( r == 0 ) break;
while ( mark[r] && r > 1 ) r--;
}
if ( temp == 0 )
{
flag = false;
}
else if ( !mark[temp] )
{
v[i].push_back ( temp );
mark[temp] = true;
flag = false;
}
else
{
while ( true )
{
bool finish = false;
for ( int j = temp ; j > 0 ; j-- )
{
if ( !mark[j])
{
mark[j] = true;
v[i].push_back ( j );
temp -= j;
finish = true;
break;
}
}
if ( !finish ) break;
if ( temp == 0 )
{
flag = false;
break;
}
}
}
if ( flag ) break;
}
if ( i == m )
{
puts ( "YES" );
for ( int i = 0 ; i < m ; i++ )
{
printf ( "%d" , v[i].size() );
for ( int j = 0 ; j < v[i].size() ; j++ )
printf ( " %d" , v[i][j] );
puts ( "");
}
}
else puts ( "NO" );
}
}

多校第六场 1003 hdu 5355 Cake(贪心)的更多相关文章

  1. 【HDU】4923 Room and Moor(2014多校第六场1003)

    Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  2. 2015多校第6场 HDU 5355 Cake 贪心,暴力DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题意:给你n个尺寸大小分别为1,2,3,…,n的蛋糕,要求你分成m份,要求每份中所有蛋糕的大小之 ...

  3. 2014多校第七场1003 || HDU 4937 Lucky Number

    题目链接 题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数 ...

  4. 2014多校第六场 1010 || HDU 4930 Fighting the Landlords (模拟)

    题目链接 题意 : 玩斗地主,出一把,只要你这一把对方要不了或者你出这一把之后手里没牌了就算你赢. 思路 : 一开始看了第一段以为要出很多次,实际上只问了第一次你能不能赢或者能不能把牌出尽. #inc ...

  5. 2014多校第六场 1007 || HDU 4927 Series 1(杨辉三角组合数)

    题目链接 题意 : n个数,每操作一次就变成n-1个数,最后变成一个数,输出这个数,操作是指后一个数减前一个数得到的数写下来. 思路 : 找出几个数,算得时候先不要算出来,用式子代替,例如: 1 2 ...

  6. 2014多校第六场 1005 || HDU 4925 Apple Tree

    题目链接 题意 : 给你一块n×m的矩阵,每一个格子可以施肥或者是种苹果,种一颗苹果可以得到一个苹果,但是如果你在一个格子上施了肥,那么所有与该格子相邻(指上下左右)的有苹果树的地方最后得到的苹果是两 ...

  7. HDU 5355 Cake

    HDU 5355 Cake 更新后的代码: 今天又一次做这道题的时候想了非常多种思路 最后最终想出了自觉得完美的思路,结果却超时 真的是感觉自己没救了 最后加了记忆化搜索,AC了 好了先说下思路吧.不 ...

  8. HDU 5355 Cake(2015多校第六场,搜索 + 剪枝)

    Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  9. 多校第六场 HDU 4927 JAVA大数类+模拟

    HDU 4927 −ai,直到序列长度为1.输出最后的数. 思路:这题实在是太晕了,比赛的时候搞了四个小时,从T到WA,唉--对算组合还是不太了解啊.如今对组合算比較什么了-- import java ...

随机推荐

  1. jquery实现图片预加载提高页面加载速度

    使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...

  2. 【知识总结】线性筛_杜教筛_Min25筛

    首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...

  3. NPOI复制模板导出Excel

    本人菜鸟实习生一枚,公司给我安排了一个excel导出功能.要求如下:1.导出excel文件有样式要求:2.导出excel包含一个或多个工作表:3.功能做活(我的理解就是excel样式以后可能会变方便维 ...

  4. html5——3D案例(立体汉字,旋转导航)

    1.立体汉字:旋转点left,attr(data-cont)可获取自定义属性值,skewY(倾斜转换)参考地址 2.旋转导航:先移动后旋转,li标签需要延迟执行旋转 注意::hover事件触发自己的: ...

  5. [Windows Server 2012] 服务器安全加固

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:服务器安全加固 ...

  6. VC使用CryptoAPI计算MD5

    // md5.h #include <tchar.h> #include <wincrypt.h> // 计算Hash,成功返回0,失败返回GetLastError() // ...

  7. dotnetnuke 获得List 属性

    new DotNetNuke.Common.Lists.ListController().GetListEntryInfo("DataType","Text") ...

  8. get传数组

    开发真的处处都是坑呀 ajax get请求,传数组,想当然的给了个json数组['','',''],结果500错误 正确的方式,多次赋值,见下图,后台会自动转数组

  9. wing ide破解

    LicenseID='CN123-12345-12345-67891' # RequestCode='RL634-8363J-X7E8K-95XD3' RequestCode = 'RW61C-NN6 ...

  10. 【Linq】标准查询操作符

    A.1 聚合 聚合操作符(见表A-1),所有的结果只有一个值而不是一个序列. Average 和 Sum 针对数值 (任何内置数值类型)序列或使用委托从元素值转换为内置数值类型的元素序列. Min 和 ...