当前位置: 首页 > news >正文

CodeChef Forest Gathering —— 二分

题目链接:https://vjudge.net/problem/CodeChef-FORESTGA



题解:

现场赛。拿到这题很快就知道是二分,但是一直wa,怎么修改也wa,后来又换了种错误的思路,最后还是觉得二分是正确的,但还是wa。人生,就是在这些瞬间被怀疑的……

结束后,才发现,test()的时候溢出了。应该把判断放在循环里面,如果达到要求的,就立刻返回。因为达到要求后,后面的运算都是多余的。



反思:

在某些判断中,如果达到要求后,就立刻执行。不要等所有操作完成后,再执行,因为可能出现意想不到的结果。



代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <cmath>
 7 #include <queue>
 8 #include <stack>
 9 #include <map>
10 #include <string>
11 #include <set>
12 #define ms(a,b) memset((a),(b),sizeof((a)))
13 //#define LOCAL
14 using namespace std;
15 typedef long long LL;
16 const int INF = 2e9;
17 const LL LNF = 9e18;
18 const int mod = 1e9+7;
19 const int maxn = 1e5+10;
20 const double pi = acos(-1.0);
21 
22 LL n,w, li;
23 int h[maxn], r[maxn];
24 
25 bool test(LL m)
26 {
27     LL s = 0;
28     for(int i = 1; i<=n; i++)
29     {
30         LL t = 1LL*h[i]+1LL*m*r[i];
31         if(t<li) continue;
32         s += t;
33         if(s>=w)
34             return 1;
35     }
36     return 0;
37 }
38 
39 //bool test(LL m)
40 //{
41 //    LL s = 0;
42 //    for(int i = 1; i<=n; i++)
43 //    {
44 //        LL t = 1LL*h[i]+1LL*m*r[i];
45 //        if(t<li) continue;
46 //        s += t;
47 //    }
48 //    return s>=w;  //加完再判断会溢出。
49 //}
50 
51 
52 int main()
53 {
54     scanf("%lld%lld%lld",&n,&w,&li);
55     for(int i = 1; i<=n; i++)
56         scanf("%d%d",&h[i],&r[i]);
57 
58     LL l = 0, r = 1e18;
59     while(l<r)
60     {
61         LL m = (l+r)>>1;
62         if(test(m))
63             r = m;
64         else
65             l = m + 1;
66     }
67     printf("%lld\n",r);
68 }
View Code

 


 

转载于:https://www.cnblogs.com/DOLFAMINGO/p/7538629.html

相关文章:

  • ReactiveSwift源码解析(九) SignalProducerProtocol延展中的Start、Lift系列方法的代码实现...
  • 在List中删除符合条件的内容
  • 亿级SQL Server运维的最佳实践PPT分享
  • socket简单理解
  • JAVA最佳实践
  • 关于Hibernate中get和load的区别
  • bootstrap-table 怎么自定义搜索按钮实现点击按钮进行查询
  • 新产品为了效果,做的比較炫,用了非常多的图片和JS,所曾经端的性能是非常大的问题,分篇记录前端性能优化的一些小经验。...
  • 百度地图坐标拾取
  • @RequestMapping-占位符映射
  • 夺命雷公狗TP3.2.3商城13-----无限极分类添加
  • 【征文】Hadoop十周年特别策划——我与Hadoop不得不说的故事
  • hdu 1671 Phone List
  • HDU 4607 树的直径
  • 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
  • canvas绘制圆角头像
  • CSS 提示工具(Tooltip)
  • Java,console输出实时的转向GUI textbox
  • JAVA_NIO系列——Channel和Buffer详解
  • Java到底能干嘛?
  • Node 版本管理
  • 安卓应用性能调试和优化经验分享
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 观察者模式实现非直接耦合
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一个完整Java Web项目背后的密码
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​决定德拉瓦州地区版图的关键历史事件
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #Lua:Lua调用C++生成的DLL库
  • #预处理和函数的对比以及条件编译
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (9)目标检测_SSD的原理
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (待修改)PyG安装步骤
  • (二)c52学习之旅-简单了解单片机
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (五)网络优化与超参数选择--九五小庞
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)负载均衡,回话保持,cookie
  • (转载)OpenStack Hacker养成指南
  • .gitignore文件_Git:.gitignore
  • .NET 发展历程
  • .NET 中让 Task 支持带超时的异步等待
  • .net开发时的诡异问题,button的onclick事件无效
  • .net项目IIS、VS 附加进程调试
  • ?.的用法
  • [AAuto]给百宝箱增加娱乐功能