题目分析:

首先要想两个暴力,一个的时间复杂度是$O(n^2)$,另一个是$O([\frac{n}{k}])$的。

$n^2$的暴力可以枚举两段,一段有$i$个取两个的小朋友,一段有$j$个取两个的小朋友。

你就可以算出每轮选取他们的代价,假设为$alpha$和$beta$。你要做的只是解$ (x+1)*alpha+x*beta=k $,不难解决。

然后是$O([\frac{n}{k}])$的暴力,枚举选举的轮数,也就是上面的$x$。首先假设每个小朋友选一个糖果,然后问题变为小朋友选或不选糖果。

引入新参数$gamma$来表示现在你需要小朋友选的糖果数。

这样不难发现一组解是$(gamma,-gamma)$。然后两个解的选择范围为$[0 or 1,len1]$和$[0,len2]$。调一调就行了。

代码:

 #include<bits/stdc++.h>
using namespace std; long long n,l,r,k; long long func(long long x,long long y,long long ki,int dr,long long ll,long long rr){
if(y == ){
if(ki == && dr == -) return -;
if(ki <= ll) return ki+rr;
else return -;
}
long long a = ki,b = -ki;
long long hh = a/y;a %= y; b += hh*x;
if(a > ll) return -;
if(dr == ){
if(b < ) return -;
if(b <= rr)return b+a;
else {
hh = (b-rr)/x+((b-rr)%x!=);
b -= hh*x;
a += hh*y;
if(a <= ll) return b+a;
else return -;
}
}else{
if(a == ) a += y,b -= x;
if(b < ) return -;
if(b <= rr) return b+a;
else {
hh = (b-rr)/x+((b-rr)%x!=);
b -= hh*x;
a += hh*y;
if(a <= ll) return b+a;
else return -;
}
}
} int main(){
scanf("%I64d%I64d%I64d%I64d",&n,&l,&r,&k);
long long um = (r-l+n)%n;
l = ; r = +um;
if(k/n <= 5e6){
long long len1 = r-l+,len2 = n-len1;
long long ans = -;
for(int i=;i<=k/n;i++){
long long zeta = k-i*n-len1;
if(zeta>=)ans = max(ans,func(i+,i,zeta,,len1,len2));
zeta = k+-i*n-len1;
if(zeta>=)ans = max(ans,func(i+,i,zeta,-,len1,len2));
}
printf("%I64d",ans);
}else{
int len1 = r-l+,len2 = n-len1;
int ans = -;
for(int i=;i<=len1;i++){
for(int j=;j<=len2;j++){
int alpha = len1+i,beta = len2+j;
long long zeta = k-alpha;
if(zeta % (alpha+beta) == ) ans = max(ans,i+j);
}
}
k++;
for(int i=;i<=len1;i++){
for(int j=;j<=len2;j++){
int alpha = len1+i,beta = len2+j;
long long zeta = k-alpha;
if(zeta % (alpha+beta) == ) ans = max(ans,i+j);
}
}
printf("%d",ans);
}
return ;
}

Codeforces1063D Candies for Children 【分类讨论】【暴力】的更多相关文章

  1. 【cf789B】Masha and geometric depression(分类讨论/暴力)

    B. Masha and geometric depression 题意 在黑板上写数列,首项是b,公比是q,超过l时就停止不写.给定m个数,遇到后跳过不写.问一共写多少个数,如果无穷个输出inf. ...

  2. CF1063D Candies for Children

    CF1063D Candies for Children 分类讨论题 n<=1e11, 整体上先分n<=2e6与否讨论 len长度,ans贪心的人,p就是len这一段贪心的人 n<= ...

  3. cf 251 B Playing with Permutations 暴力 分类讨论

    题链;http://codeforces.com/problemset/problem/251/B B. Playing with Permutations time limit per test 2 ...

  4. UVaLive 6862 Triples (数学+分类讨论)

    题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...

  5. CodeForces - 789B B. Masha and geometric depression---(水坑 分类讨论)

    CodeForces - 789B 当时题意理解的有点偏差,一直wa在了14组.是q等于0的时候,b1的绝对值大于l的时候,当b1的绝对值大于l的时候就应该直接终端掉,不应该管后面的0的. 题意告诉你 ...

  6. P5979 [PA2014]Druzyny dp 分治 线段树 分类讨论 启发式合并

    LINK:Druzyny 这题研究了一下午 终于搞懂了. \(n^2\)的dp很容易得到. 考虑优化.又有大于的限制又有小于的限制这个非常难处理. 不过可以得到在限制人数上界的情况下能转移到的最远端点 ...

  7. Codeforces 521E - Cycling City(点双连通分量+分类讨论)

    Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...

  8. Codeforces 460D Little Victor and Set --分类讨论+构造

    题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...

  9. BZOJ-1067 降雨量 线段树+分类讨论

    这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...

随机推荐

  1. Item 22: 当使用Pimpl机制时,在实现文件中给出特殊成员函数的实现

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果你曾经同过久的编译时间斗争过,那么你肯定对Pi ...

  2. Python全栈开发之路 【第十五篇】:jQuery的介绍和选择器

    本节内容 什么是jQuery? write less,do more. jQuery是一个快速,小巧,功能丰富的JavaScript库. 它通过易于使用的API在大量浏览器中运行,使得HTML文档遍历 ...

  3. struts2的基本使用

    struts2在web中当作前端控制器,接收来自页面的请求,使用过滤器拦截模式对请求进行拦截并交给相应配置的action类处理. 所以在web中使用最重要的是struts2的核心过滤器StrutsPr ...

  4. 归并排序Python 实现

    一.归并排序   -归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分合策略(将问题分(divide)成一些小的问题然后递归求解,而合的阶段则将分的阶段得到的各答案&q ...

  5. Python_内置函数之max

    源码: def max(*args, key=None): # known special case of max """ max(iterable, *[, defau ...

  6. 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

  7. Notepad++快捷使用

    用Notepad++写代码,要是有一些重复的代码想copy一下有木有简单的方法呢,确实还是有的不过也不算太好用.主要是应用键盘上的 Home 键 和 End 键.鼠标光标停留在一行的某处,按 Home ...

  8. spring boot中log4j冲突问题和解决办法

    Spring Boot中自带了log4j日志管理.写法应该是: private static final Logger logger = Logger.getLogger(XXX.class); 而不 ...

  9. Eclipse的一个“bug”

    标题之所以打上双引号,是因为暂时不知道怎么确定. 一个 .java文件里有两个类:public Bath:Soap.它们都有一个main()方法. 从命令行单独访问任意一个类的main()方法,都没毛 ...

  10. 4面向对象(OOP)

    学习线路 初学: 熟悉语法 进阶: 1.23种设计模式 2.6中开发原则 高级: 1.优化 2.架构 3.安全 概念 类:一类具有相同特性的事物的抽象描述,用一个java类表示. 成员变量:抽取的属性 ...