題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1112

題意:中文題誒~

思路:對於函數 f(x) = a + kx,對於x足夠大的情況下,顯然f(x)的值的相對大小是只受 k 影響的.對於 n 條這樣的直線最多可以發生 (n-1)*n/2 次超越;

不過本題只要求輸出前 1e4 次超越,所以可以先二分出1e4次超越的時間點(這部分是用來優化常數的),然後再枚舉每一次超越即可.這樣的時間復雜

度爲 O(n^2),對於 1e4 的數據量只要常數小一點還是能過的...

代碼:

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int MAXN = 1e4+;
  7. const int inf = 1e4;
  8. pair<int, int> p[MAXN];//存儲開始時的數據
  9. pair<int, int> p1[MAXN];//存儲1e4時間點的數據
  10. pair<double, pair<int, int> > p2[MAXN*];//存儲答案
  11. int vis[MAXN*], n;
  12.  
  13. int get_times(int mid){ //計算在k時間點可以達到的超越次數
  14. int ans = ;
  15. for(int i=; i<n; i++){
  16. p1[i].first = p[i].first + p[i].second * mid;
  17. p1[i].second = i;
  18. }
  19. sort(p1, p1+n);
  20. for(int i=; i<n; i++){
  21. if(p1[i].second < i){
  22. ans += i-p1[i].second;
  23. }
  24. }
  25. return ans;
  26. }
  27.  
  28. void get_time(void){ //二分出達到1e4次超越的時間點
  29. int l=, r=MAXN*;
  30. int ans=;
  31. while(l < r-){
  32. int mid = (l+r)>>;
  33. int cnt = get_times(mid);
  34. if(cnt == inf) break;
  35. else if(cnt > inf) r = mid;
  36. else l = mid;
  37. }
  38. }
  39.  
  40. int main(void){
  41. scanf("%d", &n);
  42. for(int i=; i<n; i++){
  43. scanf("%d%d", &p[i].first, &p[i].second);
  44. vis[p[i].first] = i+;
  45. }
  46. sort(p, p+n);
  47. get_time();
  48. int indx=;
  49. for(int i=; i<n; i++){
  50. int a2 = p[p1[i].second].first;
  51. for(int j=; j<i; j++){
  52. int a1 = p[p1[j].second].first;
  53. if(a1 > a2){
  54. int b1 = p[p1[j].second].second;
  55. int b2 = p[p1[i].second].second;
  56. double k = (a1-a2)*1.0/(b2-b1); //本次超越的時間點
  57. p2[indx].first = k;
  58. p2[indx].second.first = vis[a2];
  59. p2[indx++].second.second = vis[a1];
  60. }
  61. }
  62. }
  63. if(!indx){
  64. printf("No Solution\n");
  65. }else{
  66. sort(p2, p2+indx);
  67. int cnt = min(indx, inf);
  68. for(int i=; i<cnt; i++){
  69. printf("%d %d\n", p2[i].second.first, p2[i].second.second);
  70. }
  71. }
  72. return ;
  73. }

51nod1112(xjb)的更多相关文章

  1. 程设大作业xjb写——魔方复原

    鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...

  2. hdu_5881_Tea(xjb猜)

    题目链接:hdu_5881_Tea 题意: 有一壶水, 体积在 L 和 R 之间, 有两个杯子, 你要把水倒到两个杯子里面, 使得杯子水体积几乎相同(体积的差值小于等于1), 并且使得壶里剩下水体积不 ...

  3. hdu_5873_Football Games(xjb搞)

    题目链接:hdu_5873_Football Games 题意: 有n个队,每个队都会给其他队打一场,赢一场得2分,平局得一分,输了不得分,然后给你全部比赛结束后的得分,问你是否有假分 题解: 可以知 ...

  4. hdu_5761_Rower Bo(xjb猜公式)

    题目链接:hdu_5761_Rower Bo 题意: 让你求一个物理问题 题解: xjb猜公式,由题目样例可得,答案为8/7,然后我们可以xjb猜出公式为v1*a/(v1*v1-v2*v2),然后特判 ...

  5. 51nod1276(xjb)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1276 题意:中文题诶- 思路:xjb 通过画图可以发现对于当前 ...

  6. 隔壁信概大作业xjb写——同化棋ATAXX

    话说泥萌北大信科啊,助教是有多懒...去年黑白棋今年同化棋,顺带打ai都不用自己写标程... 好吧..我知道泥萌重点在各种sb的辅助操作上..什么悲剧的可以随时暂停载入...有毒吧 [据说泥萌上课没讲 ...

  7. [HDU5902]GCD is Funny(xjb搞)

    题意:n个数每次选三个数删除,取其中两个数将gcd放回去两次,问最后剩的数可能是多少 分析:考虑最优情况: 先拿出三个数,留下两个x,x  再来一个y,(x,x,y)我们可以删去一个x,留下两个gcd ...

  8. hdu_5927_Auxiliary Set(xjb搞)

    题目链接:hdu_5927_Auxiliary Set 题意: 给一棵n个节点的树,最开始全部都是重点,现在有q个询问,每次给你一些轻点,并叫你输出整棵树的重点数量, 轻点可能会变为重点,如果这个轻点 ...

  9. hdu_5813_Elegant Construction(xjb搞)

    题目链接:hdu_5813_Elegant Construction 题意: 给你n个点,每个点要可以到达ai个点,可以直接可以间接,不能有环,问是否可行,如果可行就任选一种方式连接,并输出连接的边数 ...

随机推荐

  1. Drupal 安装过程

    php.ini 文件 https://drupal.stackexchange.com/questions/164172/problem-installing-in-local-the-transla ...

  2. 【转载】基于注解的SpringMVC简单介绍

    SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...

  3. Android系统文件目录

  4. .NET ViewState对于画面的速度影响

    最近开发一个.NET网站,发现有一个画面的交互特别缓慢,查了很多原因都没查到 最后终于知道,是因为画面的ViewState用的过多,其中有一个ViewState保存的数据相对而言比较大,导致了画面的运 ...

  5. 使用CL命令编译cpp文件

    缘起,我的vs 2003无法新建工程,又不喜欢用vs 2013那样的重量级开发工具(就写两行代码,测试测试一些基本的语法规则或算法). 想来vs应该可以像GCC或G++那样直接用命令行编译Cpp文件, ...

  6. Linux bash shell环境变量以及语法规范

    摘自: http://blog.csdn.net/abc_ii/article/details/8762739

  7. Redis- 内存数据库Redis之安装部署

    内存数据库Redis之安装部署 Redis是一款非关系型,key-value存储的内存数据库,Redis数据库完全在内存中,使用磁盘仅用于持久性.Redis的速度非常快,每秒能执行约11万集合,每秒约 ...

  8. 2017SN多校D1T2 note:dp

    题意: 给你一个长度为n的字符串s,并且告诉你有m对字母不能相邻,问你最少在s中取出多少个字符能够使这个字符串合法. 题解: 表示状态: dp[i] = max num of letters 考虑到第 ...

  9. selenium 经常用到的API

    一.webdriver 属性及方法: 1.获取当前页面的 url driver.current_url 2 .获取窗口相关信息 get_window_position() 返回窗口x,y坐标 get_ ...

  10. 如何在u盘上安装系统, (非安装盘)

    在u盘中永久安装Fedora. 需要两个u盘(live usb), 一个系统镜像文件. 方法是: 用一个u盘作安装盘,  然后通过这个u盘把系统安装到另一个u盘上. 两个U盘上的文件都会被覆盖. 1. ...