牛客小白月赛15A 斑羚飞渡
2024-09-02 02:39:28
链接:https://ac.nowcoder.com/acm/contest/917/A
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
题目背景
两个人之间只能有一个活着 ,这必然是我和你的战争——Harry Potter
题目描述
水宝宝在看完《斑羚飞渡》这本书后,突发奇想,想到了一个有趣的问题
现在峡谷的这边有n只斑羚,每只斑羚跳跃的最远距离为x[i],斑羚在别人的背上起跳的最远距离为y[i],峡谷的两岸的距离为s,问在最好情况下,有几只斑羚可以用别人的背当跳板跳到对岸,但由于斑羚的先天原因(主要是太肥),只能把别人当跳板一次
注:本系列题不按难度排序哦
输入描述:
输入格式: 第一行n,s 接下来n行,每行2个整数代表x[i],y[i]
输出描述:
输出格式: 一行一个整数,表示有几只斑羚可以用别人的背当跳板跳到对岸
示例1
备注:
对于100%的数据,n<=1000000; 对于所有数据,s<=1000000000; x[i],y[i]<=s; 不保证x[i]<y[i] 思路:
把羚羊分为三批,第一批是自己就能跳过去的,第二批是需要别人帮助能跳过去的,第三批是即使别人帮助了也跳不过去的(只能作为踏板或者被抛弃的,枯了)
不用说第一批了,跳过去就完事了。
第二批,需要第三批或者第二批自己内部来帮助,然后就排个序吧。
这时候考虑到第二批需要第三批羊帮助的底线是啥,起码第三批羊跳的范围满足x[j] >= s-y[i]吧,这样就能踩着他跳过去啦
比如说
2 13
1 12
4 3
第一只就能踩着满足x[j] >= 13-12=1 的羊 跳过去。
这就是第二种情况:对当踏板的羊和要跳过去的羊分别排个序,从小到大取过去就行。
第三种情况也简单,第三批用不完的(工具人实锤了)直接被淘汰了。
第二批羊没了当踏板的羊,那就老老实实内部互相“帮助”吧,把剩下的除以二就行。
代码:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 2000000000
#define eps 1e-8
#define pi 3.141592653589793
const LL mod = 1e9+;
vector<pair<int,int> >v1,v2;
int main()
{
int n,s;
int sum1 = ,sum2 = ,sum3 = ;
//sum1 自己本来就过得去的,sum2需要跟过不去的配合的,sum3两只能过得去的相互配合
scanf("%d %d",&n,&s);
for(int i = ; i < n ; i++){
int x,y;
scanf("%d%d",&x,&y);
if(x>=s)sum1++;
else{
pair<int,int>pii = make_pair(x,y);
if(x+y >= s){
v1.push_back(pii);
}
else{
v2.push_back(pii);
}
}
}
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
if(!v2.empty()){
for(int i = ; i < v1.size() ; i++){
int z = s - (v1[i].second);
for(vector<pair<int,int> >::iterator it = v2.begin();it!=v2.end();it++){
int x_j = it->first;
if(x_j >= z){
sum2++;
v2.erase(it);
break;
}
}
if(v2.empty()){
break;
}
}
}
int last_v1 = v1.size() - sum2;
if(last_v1 <= ){
return printf("%d\n",sum1+sum2),;
}//有机会跳过去的羊没剩余了
else{
sum3 = last_v1/;
return printf("%d\n",sum1+sum2+sum3),;
}
}
最新文章
- DSP using MATLAB 示例Example3.9
- intent属性
- SAP供应商和客户的创建
- spring获取bean的时候严格区分大小写
- 7 天玩转 ASP.NET MVC - 第 1 天
- [Angular 2] Controlling Rx Subscriptions with Async Pipe and BehaviorSubjects
- MongoDB,HDFS, Spark to 电影推荐
- lihgtoj 1006
- C#进程启动实例
- HDOJ 5276 YJC tricks time multimap
- 关于微信小程序的的总结
- 【Zookeeper】源码分析目录
- .Net Core库类项目跨项目读取配置文件
- Tornado-基于正则的路由和动态分页
- 第一次用python 写的简单爬虫 记录在自己的博客
- Python高级网络编程系列之终极篇---自己实现一个Web框架
- docker命名空间、控制组及联合文件系统概念
- python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)
- 简单创建一个“嗨新房”的mac客户端
- HDU 1590 Searching(求复数向量和的极限)
热门文章
- C++中String字符串查找
- List容器-ArrayList
- 智能算法之Matlab实现(1)——遗传算法(1)
- myeclipse的最有用的设置
- 如何手动解析CrashLog
- phpcms信息模型使用
- [Linux]环境配置之jdk的安装 标签: jdk服务器linux 2016-08-07 22:18 502人阅读 评论(21)
- React全家桶打造共享单车后台管理系统项目_第1篇_项目环境搭建_首页编写
- Spring集成Hessian1
- POLARDB v2.0 技术解读