CF1063D Candies for Children

分类讨论题

n<=1e11,

整体上先分n<=2e6与否讨论

len长度,ans贪心的人,p就是len这一段贪心的人

n<=2e6

枚举答案ans

要满足:

p>=0,

p>=ans-(n-len)

p<=ans,

p<=len

p+len=k mod (ans+n)=r

p=r-len

判断p是否合法即可

n>=2e6

枚举i

i*ans+p=k-i*n-len=M

观察,ans++,p-=i

p最小时候,ans最大

p最小是:M%i

考虑要满足的条件:

p>=0,p<=len,p<=ans

ans>=0,ans<=p+(n-len),ans<=n

先把ans调整到n以内,再调整到p+(n-len)以内

判断p是否合法即可

因为最大合法的ans一定是最优的,ans更小,p更大,本身答案更劣,而且也更可能不合法

至于最后一个取1个,但是是贪心的,

只需要k=k+1再做一遍,并且要求p>=1

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
#define int long long
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Miracle{
ll n,l,r,k;
ll len;
ll che(ll i,ll M){
// cout<<" che "<<i<<" "<<M<<endl;
ll ret=-;
if(i==){
ll p=M;
if(p<=len) ret=max(ret,p+n-len);
p=M+;
if(p>=&&p<=len) ret=max(ret,p+n-len);
}
else{
ll p=M%i;
ll ans=(M-p)/i;
if(ans>n) {
p+=(ans-n)*i;
ans=n;
}
if(ans>n-len+p){
ll tmp=(ans-(n-len+p)+i)/(i+);
ans-=tmp;
p+=tmp*i;
}
if(p>=&&p<=min(ans,len)) ret=max(ret,ans); p=(M+)%i;
ans=(M+-p)/i;
if(ans>n){
p+=(ans-n)*i;
ans=n;
}
if(ans>n-len+p){
ll tmp=(ans-(n-len+p)+i)/(i+);
ans-=tmp;
p+=tmp*i;
}
if(p>=&&p<=min(ans,len)) ret=max(ret,ans);
}
// cout<<" ret "<<ret<<endl;
return ret;
}
int main(){
rd(n);rd(l);rd(r);rd(k);
if(l<=r) len=r-l+;
else len=n-l++r;
// cout<<" len "<<len<<endl;
if(n<=2e6){
ll ans=;
for(ans=n;ans>=;--ans){
ll r=k%(ans+n);
if(r==) r+=ans+n;
int p=r-len;
if(p>=max((ll),ans-(n-len))&&p<=min(ans,len)) break;
r=(k+)%(ans+n);
p=r-len;
if(p>=max((ll),ans-(n-len))&&p<=min(ans,len)) break;
}
if(ans>=) printf("%lld",ans);
else printf("-1");
}else{
ll M=k-len;
ll ans=-;
for(ll i=;M>=;++i,M-=n){
ll ret=che(i,M);
ans=max(ans,ret);
}
printf("%lld",ans);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/

CF1063D Candies for Children的更多相关文章

  1. 【CF1063D】Candies for Children 数学

    题目大意 有 \(n\) 个人排成一个圈,你有 \(k\) 颗糖,你要从第 \(l\) 个人开始发糖,直到第 \(r\) 个人拿走最后一颗糖.注意这 \(n\) 个人拍成了一个圈,所以第 \(n\) ...

  2. Codeforces 1063D Candies for Children

    题目大意 给定整数 $n, k, l, r$,$1\le n, k \le 10^{11}$,$1\le l, r \le n$ . 令 $ m = r - l + 1$,若 $m \le 0$,$m ...

  3. Codeforces1063D Candies for Children 【分类讨论】【暴力】

    题目分析: 首先要想两个暴力,一个的时间复杂度是$O(n^2)$,另一个是$O([\frac{n}{k}])$的. $n^2$的暴力可以枚举两段,一段有$i$个取两个的小朋友,一段有$j$个取两个的小 ...

  4. HDU 6126.Give out candies 最小割

    Give out candies Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  5. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad)

    题目链接 A. Make a triangle! 题意 让某段最少增加多少使得构成三角形 思路 让较小两段往最长段去凑 代码 #include <bits/stdc++.h> #defin ...

  6. Codeforces Round #516 (Div. 2) (A~E)

    目录 Codeforces 1064 A.Make a triangle! B.Equations of Mathematical Magic C.Oh Those Palindromes D.Lab ...

  7. Codeforces Round #516(Div 2)

    比赛链接:传送门 A. Make a triangle!(简单思维) 题目大意: 给你三条边,问你最多加多少长度能使这三条边能构成三角形. 思路: 最大边小于答案加另外两条边的和. #include ...

  8. CodeForces Round #516 Div2 题解

    A. Make a triangle! 暴力... 就是给你三个数,你每次可以选一个加1,问最少加多少次能构成三角形 #include <bits/stdc++.h> #define ll ...

  9. [CF]Round 516

    A Make a triangle! 题意:给定三根线段,问最少要延长多少才能拼成一个三角形. 数学题. B Equations of Mathematical Magic 题意:求$a - (a \ ...

随机推荐

  1. JQuery-- 实例:小米左右切图,淡入淡出,自动,小圆点触发轮播图

    示意图: demo <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. LintCode_68 二叉树后序遍历

    题目 给出一棵二叉树,返回其节点值的后序遍历. 思路 后序比较麻烦 需要另外一个变量来记录当前节点入栈的次数 设计pair<TreeNode*, int> p; p.first 为二叉树节 ...

  3. Linux安装JDK和Tomcat

    步骤如下: 1)在/root用户下建立jdk和tomcat两个文件夹并上传jdk-7u80-linux-x64.rpm和apache-tomcat-7.0.82.zip   2)安装jdk #  rp ...

  4. iOS 检测耳机插入/拔出

    http://www.verydemo.com/demo_c134_i28481.html 开发过程中录音和播放这块碰到了一些问题,麻烦的主要有三个: 检测是否有声音输入设备 当有多个声音输出设备时, ...

  5. 洛谷 P1119 灾后重建 最短路+Floyd算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1119 灾后重建 题目描述 B地区在地震过后,所有村 ...

  6. js数组增删

    1.shift() 2.pop() 3.push() 4.unshift() 5.splice(start,num,string...)

  7. Android实现圆角边框

    http://www.cnblogs.com/flyme/archive/2012/06/20/2556259.html android shape的使用 http://www.cnblogs.com ...

  8. C# 从零开始写 SharpDx 应用 画三角

    原文:C# 从零开始写 SharpDx 应用 画三角 版权声明:博客已迁移到 https://blog.lindexi.com 欢迎访问.如果当前博客图片看不到,请到 https://blog.lin ...

  9. 2019-8-31-dotnet-core-输出调试信息到-DebugView-软件

    title author date CreateTime categories dotnet core 输出调试信息到 DebugView 软件 lindexi 2019-08-31 16:55:58 ...

  10. intellij idea怎么设置java帮助文档

    打开idea我引用的jar包都放在 Project Structure-->Modules-->libs文件夹(双击) 双击jar包所在文件夹,跳出对话框. 1.如果api对应的javad ...