Regionals 2014 >> South Pacific
来源:互联网 发布:mac 查找文件夹命令 编辑:程序博客网 时间:2024/06/11 00:31
题意:给出n只袜子和一个k,每只袜子的长度不同。求两只袜子相差值从小到大第k位的袜子是哪两只。
思路:虽然题目给了20s,粗算之下暴力不会超时,然而数组是很多组的,所以纯暴力会超时。于是就想到了二分袜子的差值,本题对于数据的处理很苛刻,是一道卡时的好题。
#include<cstdio>#include<cstring>#include<string>#include<iostream>#include<vector>#include<cmath>#include<map>#include<algorithm>using namespace std;typedef long long ll;ll num[100005];int n;ll k;ll cal(int mid){ //计算两数相差小于等于mid的情况数总和 int i = 0,j = 1;ll cnt = 0;ll tot = 0;while(i < n){if(j<n && num[j]-num[i]<=mid){j ++;cnt ++;}else{tot += cnt; cnt = cnt-1; //num[j]到num[i]之差小于等于mid的有cnt个,那么num[i+1]到num[j]的有cnt-1个 i ++;}}return tot;}int main(){while(~scanf("%d%lld", &n, &k)){if(!n && !k) break;for(int i = 0;i < n;i++) scanf("%lld", num+i);sort(num,num+n);ll l = 1,r = 1000000009; //二分两数之差,找到小于等于此差的情况数恰好大于k的时候 while(l < r){ll mid = (l+r)>>1;ll tot = cal(mid);if(tot < k) l = mid+1;else r = mid;}ll rest = k-cal(r-1); //两数相减为r的情况中,所求答案位于第几位 int i = 0,j = 1;ll cnt = 0;while(i < n){if(!rest) break;if(j<n && num[j]-num[i]<=r){if(num[j]-num[i] == r){rest --;if(!rest) printf("%lld %lld\n", num[i], num[j]);}j ++;}else {i++;}}/*int flag = 0;for(int i = 0;i < n;i++){if(flag) break;for(int j = i+1;j < n;j++){if(num[j]-num[i] == r){rest --;if(!rest){flag = 1;printf("%d %d\n", num[i], num[j]);break;}}}}*/} return 0;}
0 0
- Regionals 2014 >> South Pacific
- 20131003组队赛-Regionals 2012, South Pacific
- BNU All Your Base (Regionals 2011, North America - South Central USA) - from lanshui_Yang
- Regionals 2014 Asia - Bangkok
- Regionals 2014 Asia - Bangkok
- Regionals 2014 Asia - Anshan
- Regionals 2014 Asia - Daejeon
- Regionals 2014 Asia - Xian
- Regionals 2014 >> Latin America
- Regionals 2014 >> Asia - Tokyo
- Regionals 2014 >> Asia - Tokyo
- 2014 Regionals 2014 :: Asia - ShangHai World Cup
- Regionals 2014 >> Latin America 6822 - Black a
- Regionals 2014 >> Asia - Dhaka >> 6921 - Refraction
- Regionals 2014 >> Europe - Central >> 6934 - Good morning!
- Regionals 2014 >> Latin America >> 6823 - Counting substhreengs
- Regionals 2014 >> Latin America >> 6828 - Help cupid
- South & North
- 250法则
- android调用matlab中的函数方法
- codeforces 487 C Prefix Product Sequence 构造+逆元
- 【树形背包】【JSOI 2008】【bzoj 1017】魔兽地图DotR
- CSU 1660 K-Cycle
- Regionals 2014 >> South Pacific
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- PHP函数__autoload失效原因(与smarty有关)
- Windows下Administrator对文件权限修改的问题
- C语言几个预编译指令的用法
- 如何修改WinPE Boot的.wim镜像文件
- 工作周报054
- Redis集群配置
- Jsoup 学习笔记