二分,尺取法,细节模拟,尤其是要注意a[i]被计算到和a[i]成对的a[j]里时

 #define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
long long a[];
int n;
long long k;
bool check(long long x){
long long sum=;//比x小的个数
for(int i=;i<=n;++i){
if(a[i]!=){
long long flag=x/a[i];
if(x%a[i]){
if(x>&&a[i]<){//x=5,a[i]=-2,flag=-2
sum+=n+-(lower_bound(a+,a++n,flag)-a);//[-2,∞)
if(a[i]>=flag)//如果a[i]也在上面sum加过的范围内
--sum;//去掉a[i]自己,自己不能和自己成对
}
else if(x>&&a[i]>){//x=5,a[i]=2,flag=2,flag+1=3
sum+=(lower_bound(a+,a++n,flag+)-a)-;//[2,∞)
if(a[i]<=flag)//如果a[i]也在上面sum加过的范围内
--sum;//去掉a[i]自己,自己不能和自己成对
}
else if(x<&&a[i]<)//和以上类似
sum+=n+-(upper_bound(a+,a++n,flag)-a);
else if(x<&&a[i]>)
sum+=(lower_bound(a+,a++n,flag)-a)-;
}
else{
if(x>&&a[i]<){
sum+=n+-(upper_bound(a+,a++n,flag)-a);
if(a[i]>flag)
--sum;
}
else if(x>&&a[i]>){
sum+=(lower_bound(a+,a++n,flag)-a)-;
if(a[i]<flag)
--sum;
}
else if(x<&&a[i]<)
sum+=n+-(upper_bound(a+,a++n,flag)-a);
else if(x<&&a[i]>)
sum+=(lower_bound(a+,a++n,flag)-a)-;
else if(x==&&a[i]<)
sum+=n+-(upper_bound(a+,a++n,)-a);
else if(x==&&a[i]>)
sum+=(lower_bound(a+,a++n,)-a)-;
}
}
else if(a[i]==&&x>)
sum+=n-;
}
sum>>=;//除以二,同一对被计算了两次
return sum<k;//如果比x小的不到k个,那么答案还会更大
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>k;
for(int i=;i<=n;++i)
cin>>a[i];
sort(a+,a++n);
long long l=-1e18,r=1e18;
long long ans=;
while(l<=r){
long long mid=(l+r)>>;
if(check(mid)){//此时比mid小的不到k个,答案可能可以更大,正确答案是比mid小的正好是k-1个
ans=mid;
l=mid+;
}
else
r=mid-;
}
cout<<ans;
return ;
}

Atcoder Beginner Contest 155D(二分,尺取法,细节模拟)的更多相关文章

  1. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  2. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  3. AtCoder Beginner Contest 260 (D-E)

    AtCoder Beginner Contest 260 - AtCoder D - Draw Your Cards 题意:N张卡牌数字 1-n,以某种顺序排放,每次拿一张,如果这一张比前面某一张小( ...

  4. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  5. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  6. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  7. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  8. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  9. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

随机推荐

  1. cocos studio 中交互性

    cocos studio 属性->常规->交互性,勾选之后相当于代码中的setTouchEnabled(true)

  2. Centos 安装SVN

    Centos 安装SVN  centos(我这里使用的是CentOS7)下yum命令即可方便的完成安装 $ sudo yum install subversion 测试安装是否成功: $ svnser ...

  3. PAT (Basic Level) Practice (中文)1064 朋友数 (20 分) (set)

    如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号.给定 ...

  4. python3练习100题——044

    41-43讲关于python的变量范围,没有什么别的内容,我删除了. 原题链接:http://www.runoob.com/python/python-exercise-example44.html ...

  5. 841. 字符串哈希(hash)

    给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2l1,r1,l2,r2,请你判断[l1,r1l1,r1]和[l2,r2l2,r2]这两个区间所包含的字符串子串是否完 ...

  6. python语言基础3

    一:python函数 是组织好的,可重复使用的,用来实现单一,或相关联功能的代码块.以前使用过的一些Python提供的内建函数,如print().max(4,18).min(100,50).当然我们自 ...

  7. Cow Contest POJ - 3660 floyd传递闭包

    #include<iostream> #include<cstring> using namespace std; ,INF=0x3f3f3f3f; int f[N][N]; ...

  8. 菜不成声 的 ac自动机 刷题记录

    HDU2222 Keywords Search 模板题.数组开小了结果会T... 代码 #include <bits/stdc++.h> #define nmax 10010 using ...

  9. ajax从jsp向servlet传值

    function Delete(s){ xmlHttp=new XMLHttpRequest(); var url = "/emp/FindSpecial?selcol=" +s; ...

  10. jacob导入项目

    在 resource 下创建一个 lib 将网上下载的 jacob.jar 放入其中 在 pom 文件中导入相对应的 jar 包 <dependency> <groupId>c ...