C - C

CodeForces - 991C

题目内容:

After passing a test, Vasya got himself a box of n candies. He decided to eat an equal amount of candies each morning until there are no more candies. However, Petya also noticed the box and decided to get some candies for himself.

This means the process of eating candies is the following: in the beginning Vasya chooses a single integer k, same for all days. After that, in the morning he eats k candies from the box (if there are less than k candies in the box, he eats them all), then in the evening Petya eats 10% of the candies remaining in the box. If there are still candies left in the box, the process repeats — next day Vasya eats k candies again, and Petya — 10% of the candies left in a box, and so on.

If the amount of candies in the box is not divisible by 10, Petya rounds the amount he takes from the box down. For example, if there were 97 candies in the box, Petya would eat only 9 of them. In particular, if there are less than 10 candies in a box, Petya won't eat any at all.

Your task is to find out the minimal amount of k that can be chosen by Vasya so that he would eat at least half of the n candies he initially got. Note that the number k must be integer.

Input
The first line contains a single integer n (1≤n≤1018) — the initial amount of candies in the box. Output
Output a single integer — the minimal amount of k that would allow Vasya to eat at least half of candies he got. Example
Input
68
Output
3
Note
In the sample, the amount of candies, with k=3, would change in the following way (Vasya eats first): 68→65→59→56→51→48→44→41→37→34→31→28→26→23→21→18→17→14→13→10→9→6→6→3→3→0. In total, Vasya would eat 39 candies, while Petya — 29.

题意:有n颗糖果,V和P来吃这些糖果,一开始,V选择一个整数k,以后每天都相同数量k个。之后,早上他从盒子里吃k个糖果(如果盒子里少于k个糖果,他就全部吃掉),然后晚上P吃掉盒子里剩余的10%的糖果。如果盒子里还剩下糖果,则重复此过程-第二天,V再吃k糖果,P-盒子里剩下的糖果的10%,依此类推。如果包装盒中的糖果数量不能被10整除,则P将其从包装盒中取出的糖果数量向下取整。例如,如果盒子里有97个糖果,那么P只吃其中的9个。特别是,如果一个盒子里的糖果少于10,那么P根本不会吃任何糖果。任务是找出V可以选择的最小数量的k,以便他可以吃掉最初获得的n糖果的至少一半。注意数字k为整数。

思路:运用二分法

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,l,r,mid,x,tmp,cnt,sum,ans=1e18;
cin>>n;
l=0,r=n;
while(l<=r){
sum=0;
mid=(l+r)/2;
if(mid==0) {l+=1;continue;}//如果枚举出0,那么肯定是不可以的,所以l+1
tmp=n;
while(1){
if(tmp>=mid) tmp-=mid,sum+=mid;//如果剩余的大于mid,那么减去mid,否则,直接取完
else sum+=tmp,tmp=0;
tmp-=tmp/10;
x=n%2?(n/2)+1:n/2;//n/2不是整数,那么加一(相当与向上取整)
if(sum>=x) break;//如果a取的蛋糕比n的一半还要多,那么这个mid是可以的
if(tmp==0) {sum=-1;break;}
}
if(sum!=-1) r=mid-1,ans=min(ans,mid);//如果mid满足条件,更新ans
else l=mid+1;
}
cout<<ans<<endl;
return 0;
}

2020.1.30--vj补题的更多相关文章

  1. LCCUP 2020 秋季编程大赛 补题

    果然是力扣杯,难度较于平时周赛提高了不少,个人感觉最后两题并不太容易QAQ LCP 18.早餐组合 #二分思想 题目链接 题意 你获得了每种主食的价格,及每种饮料的价格,你需要选择一份主食和一份饮料, ...

  2. QFNU-ACM 2020.04.05个人赛补题

    A.CodeForces-124A (简单数学题) #include<cstdio> #include<algorithm> #include<iostream> ...

  3. 2021-5-15 vj补题

    C - Win or Freeze CodeForces - 151C 题目内容: You can't possibly imagine how cold our friends are this w ...

  4. 2020.12.3--vj个人赛补题

    A Vasya studies music.He has learned lots of interesting stuff. For example, he knows that there are ...

  5. Technocup 2020 - Elimination Round 1补题

    慢慢来. 题目册 题目 A B C D tag math strings greedy dp 状态 √ √ √ √ //∅,√,× 想法 A. CME res tp A 题意:有\(n\)根火柴,额外 ...

  6. 2021.5.22 vj补题

    A - Marks CodeForces - 152A 题意:给出一个学生人数n,每个学生的m个学科成绩(成绩从1到9)没有空格排列给出.在每科中都有成绩最好的人或者并列,求出最好成绩的人数 思路:求 ...

  7. 2020.10.30--vj个人赛补题

    D - D CodeForces - 743A Vladik is a competitive programmer. This year he is going to win the Interna ...

  8. 2020.10.23-vj个人赛补题

    B - B Polycarp loves lowercase letters and dislikes uppercase ones. Once he got a string s consistin ...

  9. 2020.10.16--vj个人赛补题

    D - Drinks Choosing Old timers of Summer Informatics School can remember previous camps in which eac ...

  10. 2020.10.9--vj个人赛补题

    B - A Tide of Riverscape 题意:给出一组字符串,由'0','1',' . '组成,' . '可以换成 0或1,判断第 i  个和第 i+p 个字符是否可以不相等,如果可以则输出 ...

随机推荐

  1. Java并发之AQS原理解读(三)

    上一篇:Java并发之AQS原理解读(二) 前言 本文从源码角度分析AQS共享锁工作原理,并介绍下使用共享锁的子类如何工作的. 共享锁工作原理 共享锁与独占锁的不同之处在于,获取锁和释放锁成功后,都会 ...

  2. MySQL修改配置文件 避免中文乱码

    MySQL修改配置文件 避免中文乱码 MySQL安装后默认的服务器字符集是拉丁文,也就是说默认 character_set_server = latin1 ,这是造成 MySQL 中文乱码的主要原因之 ...

  3. TCP通信的实现代码

    TCP通信 概念 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 从百科定义中就可以看出,TCP通信的基本条件 ...

  4. 自己写一个Map

    Map的实现其实很简单,一个key对应一个value就行 . 本Map是写着玩的,是想告诉初学者我们也可以写一个简单的Map来自己用 代码: public class MyMap<K, V> ...

  5. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

  6. Merchant

      \(get\)二分新用法.   每道题都有答案范围提示,以前只是以为是用来提示用什么类型输出的.   从来没想过直接用它来二分.   这道题真的刷新了我的认知啊......   整道题的复杂度是\ ...

  7. openswan协商流程之(五):main_inR2_outI3()

    主模式第五包:main_inR2_outI3 文章目录 主模式第五包:main_inR2_outI3 1. 序言 2.函数调用关系 3. 第五个报文流程图 4. main_inR2_outI3()源码 ...

  8. lua中的sleep实现

    这篇文章主要介绍了Lua中实现sleep函数功能的4种方法,本文讲解了在一个死循环中设置一个跳出条件方法.调用系统的sleep函数法.Windows下ping命令法.socket库中select函数法 ...

  9. 在C++11编译环境中,简单自测了一下C++标准库中的string/vector和迭代器,记录一下

    #include <iostream> #include <vector> using namespace std; int main() { //////////////// ...

  10. CodeForce-782B The Meeting Place Cannot Be Changed(高精度二分)

    https://vjudge.net/problem/CodeForces-782B B. The Meeting Place Cannot Be Changed time limit per tes ...