ABC155 D pair 边界处理取整
ABC155 D pair 取整坑点
思路
很常见的一道题,二分找答案,然后看这个答案排rank?,排rank?用二分继续找一遍二分套二分即可,就是边界比较烦,老年人写的心情烦躁
老年人被取整坑的几天。这题其实以前写过,以前被坑过,然后这次又被坑了一次,不愧是我。。。
1.ceil和floor一个是接近无穷大,另外一个是接近无穷小取
2.直接两个int除 是向0取整 int(-1/2)=-1 int(-4/3)=-1也就是负数的时候和人正常的向下取整逻辑不一样,逻辑上认为是向小了取,而事实是向0取
3.如果n>=m>0向上取整建议(n-1)/m+1
4.负数的时候推荐使用ceil 除非精度要求特别高 否则一般不会翻车
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define F first
#define S second
#define mkp make_pair
#define pii pair<int,int>
typedef long long ll;
const int maxn=2e5+5;
const int mod=1e9+7;
ll n,k,ling;
ll a[maxn];
bool check(ll x){
ll cnt=0;
for(int i=0;i<n;i++){
if(a[i]==0){
if(x>=0)cnt+=n-1;
continue;
}
else if(a[i]<0){
ll tmp=0;
if(x>=0)tmp=x/a[i];//a[i]*tmp<=x
else {
if(x%a[i]==0)tmp=x/a[i];
else tmp=x/a[i]+1;
}
cnt+=n-(lower_bound(a,a+n,tmp)-a);
}
else if(a[i]>0){
ll tmp=0;
if(x>=0)tmp=x/a[i];
else{
if(x%a[i]==0)tmp=x/a[i];
else tmp=x/a[i]-1;
}
cnt+=upper_bound(a,a+n,tmp)-a;
}
if(a[i]*a[i]<=x)cnt--;
//cout<<cnt<<endl;
}
return cnt/2>=k;
}
int main(){
scanf("%lld%lld",&n,&k);
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
}
sort(a,a+n);
ll l=-1e18,r=1e18,ans=0;
while(l<=r){
ll mid=(l+r)/2;
if(check(mid))r=mid-1,ans=mid;
else l=mid+1;
}
//check(-6);
cout<<ans<<endl;
}
ABC155 D pair 边界处理取整的更多相关文章
- js 为何范围内随机取整要用floor,而不是ceil或者round呢
壹 ❀ 引 我在如何使用js取任意范围内随机整数这篇博客中,列举并分析了取[n,m)与[n,m]范围内整数的通用方法,并在文章结果留了一个疑问:为什么通用方法中取整操作,我们使用Math.floor ...
- 灯光照射,圆形探测类问题(解题报告)<分层差分><cmath取整>
题目描述 一个n*n的网格图上有m个探测器,每个探测器有个探测半径r,问这n*n个点中有多少个点能被探测到. 输入输出格式 输入格式: (1<=r<n<=5000) (1<=m ...
- ios小数向上、下取整,计算结果向上、下取整
[摘要:小数背上与整,指小数局部间接进1 x=3.14, ceilf (x)=4 小数背下与整,指间接往失落小数局部 x=3.14,floor(x)=3 盘算效果背上与整 A被除数,B除数 ,(AB- ...
- Java Math 取整的方式
1.Math.floor floor,英文原意:地板. Math.floor 函数是求一个浮点数的地板,就是 向下 求一个最接近它的整数,它的值肯定会小于或等于这个浮点数. 2.Math.ceil c ...
- c#中取整,向上取,向下取
Math.Ceiling()向上取整, Math.Floor()向下取整 示例: d = 4.56789 Math.Ceiling(Convert.ToDecimal(d)).ToString();M ...
- iOS 常用的向上,向下取整, 四舍五入函数
向上取整:ceil(x),返回不小于x的最小整数; 向下取整:floor(x),返回不大于x的最大整数; 四舍五入:round(x) 截尾取整函数:trunc(x)
- Sql 获取向上取整、向下取整、四舍五入取整的实例
[四舍五入取整截取] select round(54.56,0) [向下取整截取] SELECT FLOOR(54.56) [向上取整截取] SELECT CEILING(13.15) --MS ...
- js只保留整数,向上取整,四舍五入,向下取整等函数
1.丢弃小数部分,保留整数部分 parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3.四舍五入. Math.round(5/2) 4.向下取整 Math.f ...
- javascript 取整,取余数
1.丢弃小数部分,保留整数部分 parseInt(5/2) 2 2.向上取整,有小数,则整数部分加1 Math.ceil(5/2) 3 3.四舍五入 Math.round(5/2) 3 4.向下取整 ...
随机推荐
- 字符串转数字 (With C++)
1.stoi().stof().stod() 实现字符串转 int.float.double. stoi -> string to integer stof -> string to fl ...
- mysql设置编码格式--支持中文
创建table的时候就使用utf8编码 在每次创建表的时候都在最后加上 character set = utf8就可以很好的支持中文 create table xxx ( id int auto_in ...
- dapi 基于Django的轻量级测试平台八 Docker部署
QQ群: GitHub:https://github.com/yjlch1016/dapi 采用Docker+Supervisor+Nginx+uWSGI+Django 一.Dockerfile文件: ...
- List集合去重各种方式汇总
package com.sb.test; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java. ...
- Oracle查询如何才能行转列?-sunziren
原创文章,转载务必注明出处. 今天工作的时候,碰到一个问题,涉及oracle行转列,用了半小时解决,因此在这里写个博客记录一下解决办法. 原数据库表的数据是: 想要达到的效果是: 经过思考,这是一个o ...
- zerotier的下载、安装、配置与使用(win10、ubuntu)
一.需求描述 2020年,由于“野味肺炎”的影响,笔者要开始在家办公,需要远程连接公司的电脑和设备. 但是公司的网络和家里的网络不是同个局域网,不能直接用微软的远程桌面连接.想挂上公司的vpn,但是又 ...
- P1196 [NOI2002]银河英雄传说 【带权并查集】
思路 用sum记录每个舰队的战舰数量, tohead 记录当前舰离舰首的距离,那么求任意两舰之间有多少舰显然就是 abs( tohead[i] - tohead[j] ) - 1: CODE #inc ...
- linux 磁盘管理2-硬盘分区
不重启添加硬盘. echo '- - -' > /sys/class/scsi_host/host2/scan #centos7有效 列出块设备 lsblk 显示块设备列表 ...
- OptaPlanner 7.32.0.Final版本彩蛋 - SolverManager之异步求解
因为工作和其它原因,很长一段时间没有出新的.关于OptaPlanner的文章了,但工余时间并没有停止对该引擎的学习.与此同时Geoffrey大神带领的KIE项目团队并没有闲下来,尽管在工业可用性.易用 ...
- Java Web笔记(2)
学习笔记,狂神说java,链接:https://www.bilibili.com/video/av68833391 5.Maven 我为什么要学习这个技术? 在Javaweb开发中,需要使用大量的ja ...