51nod1112(xjb)
題目鏈接: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 的數據量只要常數小一點還是能過的...
代碼:
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- using namespace std;
- const int MAXN = 1e4+;
- const int inf = 1e4;
- pair<int, int> p[MAXN];//存儲開始時的數據
- pair<int, int> p1[MAXN];//存儲1e4時間點的數據
- pair<double, pair<int, int> > p2[MAXN*];//存儲答案
- int vis[MAXN*], n;
- int get_times(int mid){ //計算在k時間點可以達到的超越次數
- int ans = ;
- for(int i=; i<n; i++){
- p1[i].first = p[i].first + p[i].second * mid;
- p1[i].second = i;
- }
- sort(p1, p1+n);
- for(int i=; i<n; i++){
- if(p1[i].second < i){
- ans += i-p1[i].second;
- }
- }
- return ans;
- }
- void get_time(void){ //二分出達到1e4次超越的時間點
- int l=, r=MAXN*;
- int ans=;
- while(l < r-){
- int mid = (l+r)>>;
- int cnt = get_times(mid);
- if(cnt == inf) break;
- else if(cnt > inf) r = mid;
- else l = mid;
- }
- }
- int main(void){
- scanf("%d", &n);
- for(int i=; i<n; i++){
- scanf("%d%d", &p[i].first, &p[i].second);
- vis[p[i].first] = i+;
- }
- sort(p, p+n);
- get_time();
- int indx=;
- for(int i=; i<n; i++){
- int a2 = p[p1[i].second].first;
- for(int j=; j<i; j++){
- int a1 = p[p1[j].second].first;
- if(a1 > a2){
- int b1 = p[p1[j].second].second;
- int b2 = p[p1[i].second].second;
- double k = (a1-a2)*1.0/(b2-b1); //本次超越的時間點
- p2[indx].first = k;
- p2[indx].second.first = vis[a2];
- p2[indx++].second.second = vis[a1];
- }
- }
- }
- if(!indx){
- printf("No Solution\n");
- }else{
- sort(p2, p2+indx);
- int cnt = min(indx, inf);
- for(int i=; i<cnt; i++){
- printf("%d %d\n", p2[i].second.first, p2[i].second.second);
- }
- }
- return ;
- }
51nod1112(xjb)的更多相关文章
- 程设大作业xjb写——魔方复原
鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...
- hdu_5881_Tea(xjb猜)
题目链接:hdu_5881_Tea 题意: 有一壶水, 体积在 L 和 R 之间, 有两个杯子, 你要把水倒到两个杯子里面, 使得杯子水体积几乎相同(体积的差值小于等于1), 并且使得壶里剩下水体积不 ...
- hdu_5873_Football Games(xjb搞)
题目链接:hdu_5873_Football Games 题意: 有n个队,每个队都会给其他队打一场,赢一场得2分,平局得一分,输了不得分,然后给你全部比赛结束后的得分,问你是否有假分 题解: 可以知 ...
- hdu_5761_Rower Bo(xjb猜公式)
题目链接:hdu_5761_Rower Bo 题意: 让你求一个物理问题 题解: xjb猜公式,由题目样例可得,答案为8/7,然后我们可以xjb猜出公式为v1*a/(v1*v1-v2*v2),然后特判 ...
- 51nod1276(xjb)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1276 题意:中文题诶- 思路:xjb 通过画图可以发现对于当前 ...
- 隔壁信概大作业xjb写——同化棋ATAXX
话说泥萌北大信科啊,助教是有多懒...去年黑白棋今年同化棋,顺带打ai都不用自己写标程... 好吧..我知道泥萌重点在各种sb的辅助操作上..什么悲剧的可以随时暂停载入...有毒吧 [据说泥萌上课没讲 ...
- [HDU5902]GCD is Funny(xjb搞)
题意:n个数每次选三个数删除,取其中两个数将gcd放回去两次,问最后剩的数可能是多少 分析:考虑最优情况: 先拿出三个数,留下两个x,x 再来一个y,(x,x,y)我们可以删去一个x,留下两个gcd ...
- hdu_5927_Auxiliary Set(xjb搞)
题目链接:hdu_5927_Auxiliary Set 题意: 给一棵n个节点的树,最开始全部都是重点,现在有q个询问,每次给你一些轻点,并叫你输出整棵树的重点数量, 轻点可能会变为重点,如果这个轻点 ...
- hdu_5813_Elegant Construction(xjb搞)
题目链接:hdu_5813_Elegant Construction 题意: 给你n个点,每个点要可以到达ai个点,可以直接可以间接,不能有环,问是否可行,如果可行就任选一种方式连接,并输出连接的边数 ...
随机推荐
- Drupal 安装过程
php.ini 文件 https://drupal.stackexchange.com/questions/164172/problem-installing-in-local-the-transla ...
- 【转载】基于注解的SpringMVC简单介绍
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...
- Android系统文件目录
- .NET ViewState对于画面的速度影响
最近开发一个.NET网站,发现有一个画面的交互特别缓慢,查了很多原因都没查到 最后终于知道,是因为画面的ViewState用的过多,其中有一个ViewState保存的数据相对而言比较大,导致了画面的运 ...
- 使用CL命令编译cpp文件
缘起,我的vs 2003无法新建工程,又不喜欢用vs 2013那样的重量级开发工具(就写两行代码,测试测试一些基本的语法规则或算法). 想来vs应该可以像GCC或G++那样直接用命令行编译Cpp文件, ...
- Linux bash shell环境变量以及语法规范
摘自: http://blog.csdn.net/abc_ii/article/details/8762739
- Redis- 内存数据库Redis之安装部署
内存数据库Redis之安装部署 Redis是一款非关系型,key-value存储的内存数据库,Redis数据库完全在内存中,使用磁盘仅用于持久性.Redis的速度非常快,每秒能执行约11万集合,每秒约 ...
- 2017SN多校D1T2 note:dp
题意: 给你一个长度为n的字符串s,并且告诉你有m对字母不能相邻,问你最少在s中取出多少个字符能够使这个字符串合法. 题解: 表示状态: dp[i] = max num of letters 考虑到第 ...
- selenium 经常用到的API
一.webdriver 属性及方法: 1.获取当前页面的 url driver.current_url 2 .获取窗口相关信息 get_window_position() 返回窗口x,y坐标 get_ ...
- 如何在u盘上安装系统, (非安装盘)
在u盘中永久安装Fedora. 需要两个u盘(live usb), 一个系统镜像文件. 方法是: 用一个u盘作安装盘, 然后通过这个u盘把系统安装到另一个u盘上. 两个U盘上的文件都会被覆盖. 1. ...