牛客练习赛6 A 【二分】
来源:互联网 发布:华为软件视频会议 编辑:程序博客网 时间:2024/05/24 04:14
题目描述
有n只猴子,第i只猴子每过xi小时会连续吃香蕉yi小时。猴子从第二次开始每次休息结束后这只猴子连续吃香蕉的时间会增加zi小时。
给定n只猴子,每一只的xi,yi,zi,以及时间t,求在前t小时中,所有猴子共吃了多少小时。
对于一只猴子来说是这样的:
从第1小时开始:
休息xi小时( 1 -> xi )
吃yi小时( xi + 1 -> xi + yi )
休息xi小时
吃yi+zi小时
休息xi小时
吃yi+zi+zi小时
......
从第1小时开始:
休息xi小时( 1 -> xi )
吃yi小时( xi + 1 -> xi + yi )
休息xi小时
吃yi+zi小时
休息xi小时
吃yi+zi+zi小时
......
输入描述:
第一行两个数n和t;
之后n行,第i+1行每行三个数xi,yi,zi.
输出描述:
一行一个数表示答案.
示例1
输入
10 1000000001 0 01 0 51 2 21 2 81 3 01 5 01 5 21 5 51 7 01 8 3
输出
845787522
说明
每只猴子分别吃了0,99993675,99990000,99994999,75000000,83333333,99990002,99993676,87500000,99991837小时
示例2
输入
1 233333233 233 233
输出
223081
说明
那只猴子吃了223081小时
备注:
对于100%的数据:0 <= n <= 1000000 <= t <= 2000000000x + y + z > 00 <= x , y , z <= 2000000000
#include <bits/stdc++.h>using namespace std;long long n,m;long long check( long long x,long long y,long long z){ long long l=0,r=m,mid,s; while(l<=r) { mid=(l+r)/2; s=mid*y+mid*(mid-1)/2*z+mid*x; //cout<<"sad "<<s<<endl; if( s<=m&&s>0 ) { l=mid+1; } else r=mid-1; } return l-1;}int main(){ while(cin>>n>>m) { long long ans=0; long long x,y,z; for(long long i=0;i<n;i++) { cin>>x>>y>>z; long long mid=check(x,y,z); cout<<mid<<endl; //cout<<mid<<endl; long long s=m-(mid*y+mid*(mid-1)/2*z+(mid)*x); if(s>=x) { ans+=m-(mid+1)*x; } else { ans+=mid*y+mid*(mid-1)/2*z; } } cout<<ans<<endl; }}
阅读全文
0 0
- 牛客练习赛6 A 【二分】
- 牛客练习赛6A&D
- 牛客练习赛4(A+B)
- 牛客练习赛7 A 骰⼦的游戏
- 牛客练习赛7 A B D E
- 牛客练习赛8 A-约数个数的和
- 【牛客练习赛8】A D E
- 牛客练习赛8 A B D E
- 牛客练习赛6 A 猴子吃香蕉(等差数列)
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 论文:Deeplab_v4
- Lua __index和__newindex
- 删除solr索引
- 疯狂java笔记-JDBC常用接口和类
- Apache
- 牛客练习赛6 A 【二分】
- TestNG入门教程-11-如何通过testng.xml来实现设置依赖关系
- knn算法实例(python)
- python多线程的两种实现方式
- 剑指offer------反转链表
- 手动部署 ceph 环境说明 (luminous 版)
- c++中new与delete的重载--(boolan)
- 排序算法模版实现
- session的创建