Codeforces1063D Candies for Children 【分类讨论】【暴力】
题目分析:
首先要想两个暴力,一个的时间复杂度是$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 【分类讨论】【暴力】的更多相关文章
- 【cf789B】Masha and geometric depression(分类讨论/暴力)
B. Masha and geometric depression 题意 在黑板上写数列,首项是b,公比是q,超过l时就停止不写.给定m个数,遇到后跳过不写.问一共写多少个数,如果无穷个输出inf. ...
- CF1063D Candies for Children
CF1063D Candies for Children 分类讨论题 n<=1e11, 整体上先分n<=2e6与否讨论 len长度,ans贪心的人,p就是len这一段贪心的人 n<= ...
- cf 251 B Playing with Permutations 暴力 分类讨论
题链;http://codeforces.com/problemset/problem/251/B B. Playing with Permutations time limit per test 2 ...
- UVaLive 6862 Triples (数学+分类讨论)
题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...
- CodeForces - 789B B. Masha and geometric depression---(水坑 分类讨论)
CodeForces - 789B 当时题意理解的有点偏差,一直wa在了14组.是q等于0的时候,b1的绝对值大于l的时候,当b1的绝对值大于l的时候就应该直接终端掉,不应该管后面的0的. 题意告诉你 ...
- P5979 [PA2014]Druzyny dp 分治 线段树 分类讨论 启发式合并
LINK:Druzyny 这题研究了一下午 终于搞懂了. \(n^2\)的dp很容易得到. 考虑优化.又有大于的限制又有小于的限制这个非常难处理. 不过可以得到在限制人数上界的情况下能转移到的最远端点 ...
- Codeforces 521E - Cycling City(点双连通分量+分类讨论)
Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...
- Codeforces 460D Little Victor and Set --分类讨论+构造
题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
随机推荐
- 通过 Systemd Journal 收集日志
随着 systemd 成了主流的 init 系统,systemd 的功能也在不断的增加,比如对系统日志的管理.Systemd 设计的日志系统好处多多,这里笔者就不再赘述了,本文笔者主要介绍 syste ...
- vue 渲染函数&jsx
前端更新状态,更新视图,所以性能问题主要由Dom操作引起的,而js解析编译dom渲染就要快得多, 所把要js和html混写. vue 的动态js操作 html 方法:reader函数: vue ...
- linux中根据名称kill进程
shell函数如下: # kill processes by name kbn() { line=`ps -a | grep $1` arr=($line) for((i=0;i<${#arr[ ...
- Git Gerrit Code Review
Gerrit Code Review | Gerrit Code Reviewhttps://www.gerritcodereview.com/
- 网站数据分析&初始来源
数据分析:如何追踪访客初始来源_搜索学院_百度搜索资源平台 https://ziyuan.baidu.com/college/articleinfo?id=260 网站数据分析:如何追踪访客初始来源 ...
- C#复习笔记(4)--C#3:革新写代码的方式(用智能的编译器来防错)
用智能的编译器来防错 本章的主要内容: 自动实现的属性:编写由字段直接支持的简单属性, 不再显得臃肿不堪: 隐式类型的局部变量:根据初始值推断类型,简化局部变量的声明: 对象和集合初始化程序:用一个表 ...
- Oracle Profile 配置文件
Profile是用户的配置文件,它是密码限制,资源限制的命名集合.利用profile 可以对数据库用户进行基本的资源管理,密码管理. 1 创建profile 的语法 create profile pr ...
- Day 4-8 hashlib加密模块
HASH Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射 ...
- CRM/PLM/SCM/MES与ERP的联系与区别
企业通过专设信息机构.信息主管,配备适应现代企业管理运营要求的自动化.智能化.高技术硬件.软件.设备.设施,建立包括网络.数据库和各类信息管理系统在内的工作平台,提高企业经营管理效率的发展模式. 那么 ...
- 在JavaEE中使用Hibernate框架
我们必须要了解一些Hibernate基础对象,如下: 配置对象 配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate 对象,并且经常只在应用程序初始化期间创造.它代表了 ...