hdoj 5355 Cake(分析+二分)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355

分蛋糕的题目,有1-n大小的n个蛋糕,要求平均分成m份,不能切开蛋糕

 1 #include<stdio.h>
 2 #include<set>
 3 using namespace std;
 4 int main(){
 5     set<int>s;
 6     set<int>::iterator it;
 7     long long n;
 8     int m;
 9     int part1, T;
10     int ave;
11     int k, l;
12     int cnt, res, w[40];
13     scanf("%d",&T);
14     while(T--){
15         scanf("%I64d %d", &n, &m);
16         if( m*2-1 > n || (1+n)*n/2 % m != 0) {
17             puts("NO");
18             continue;
19         }
20         else{
21             puts("YES");
22             k = m*2;
23             l = n-k+1;
24             part1 = l%k+k-1;
25             ave = (1+part1)*part1/k;
26             //将n分成两部分,一部分是较小的数,可以凑成m个相同的和
27             //另一部分是较大的数,是2*m的倍数个,可以凑成相同的对
28             for( int i = 1; i <= part1; ++i){
29                 s.insert(i);
30             }
31             //只把前一部分较小的数放进集合里
32             for( int i = 0; i < m; ++i){
33                 cnt = res = 0;
34                 while(res<ave){
35                     it = s.upper_bound(ave-res);
36                     res += *--it;
37                     w[cnt++] = *it;
38                     s.erase(*it);
39                 }
40                 //二分查找
41                 printf("%I64d",cnt+2*(n-part1)/k);
42                 for( int i = 0; i < cnt; ++i)
43                     printf(" %d",w[i]);
44                 for( int i = 0; i < l/k; ++i){
45                     printf(" %d %I64d",1+part1++,n--);
46                 }
47                 printf("\n");
48             }
49         }
50     }
51 }
时间: 2024-07-31 20:45:21

hdoj 5355 Cake(分析+二分)的相关文章

HDU 5355 Cake

HDU 5355 Cake 更新后的代码: 今天又一次做这道题的时候想了非常多种思路 最后最终想出了自觉得完美的思路,结果却超时 真的是感觉自己没救了 最后加了记忆化搜索,AC了 好了先说下思路吧.不知道大家住没注意m<=10 我们能够把大部分的数据写成成对的形式比如n=27 m=6的这组数据 第1份  27  16 第2份  26  17 第3份  25  18 第4份  24  19 第5份  23  20 第6份  22  21 剩下1~15搜索出6等份分给全部人 这样成对出现的数蛇形数我

多校第六场 1003 hdu 5355 Cake(贪心)

题目链接:(数据加强后wa了) hdu 5355 题目大意: 给出一个蛋糕.切成1~n大小的n块.问是否能在不继续分割的情况下拼凑出m等份. 题目分析: 首先我们是可以知道每份蛋糕的尺寸的,利用n*(n+1)/2m可以算出来,假设不能整除的话,那么一定无解. 然后我们考虑怎样构造一组解,对于一块蛋糕,我想到了一个贪心策咯,尽量选择最大块的蛋糕,由于假设能选可是不选这块蛋糕,那么也一定是通过选取小块的蛋糕来拼凑出这块蛋糕的大小,可是假设小的拼凑出了这块,那么就不能用于拼凑其它的蛋糕,显然选择最大的

HDU 5355 Cake (WA后AC代码,具体解析,构造题)

题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5355 题面: Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1632    Accepted Submission(s): 273 Special Judge Problem Description There are s

HDU 5355 Cake (WA后AC代码,详细解析,构造题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题面: Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1632    Accepted Submission(s): 273 Special Judge Problem Description There are m

Hdoj 2333 Assemble 【二分】

Assemble Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 479    Accepted Submission(s): 169 Problem Description Recently your team noticed that the computer you use to practice for programming

HDOJ 5141 LIS again 二分

二分求LIS 对每一个位置为终点的LIS记录开头的最靠右边的值.... LIS again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 272    Accepted Submission(s): 96 Problem Description A numeric sequence of ai is ordered if a1<a2<

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

Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 965    Accepted Submission(s): 119 Special Judge Problem Description There are m soda and today is their birthday. The 1-st soda has prepa

hdu 5355 Cake(构造+回溯)

题意: 给出一个蛋糕,切成1~n大小的n块,问能否在不继续切割的情况下拼凑出m等份. 解析: 首先可以求出这些蛋糕的总和n?(n+1)/2,如果总和sum%m != 0那么就不肯能被平分成m份,那么输出"NO". 接下来计算平均数avg=sum/m,如果平均数avg < n的话,蛋糕是不可能用完的,同样也输出"NO". 剩下的情况蛋糕是一定能拼成"YES"的,那么可以将这些蛋糕以2*m为单位一组一组的分配,每个人拿当前这组的最大和最小,次大

hdoj 1969 Pie【二分】

Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6320    Accepted Submission(s): 2383 Problem Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I h