【二分】Pair of Topics

【题目链接】:传送门



【题意】

  给定A[],B[],请问有多少对ai+aj > bi + bj ,i < j

【题解】

  问题先分析,可以通过推导得到:

  (ai - bi) + ( aj - bj ) > 0

  Ci + Cj > 0

  Cj >= -Ci + 1

  我们可以通过排序,(为什么呢?其原因是因为找一对,所有对子都是相对的,张三和李四,李四和张三指的都是同一对)

因为C的值有正负之分,我们只取大于0的部分来算,通过式子Cj >= -Ci + 1 在枚举i的位置时,计算出J。对于答案的贡献就是i-j。

以此计算C值得:0,3,-2,5,-1

排序后得到:  -2,-1,0,3,5

枚举每一个 “i” 的位置,通过Cj >= -Ci + 1 ,找到J的位置

通过二分得到即可。

上面对答案的贡献为:0,0,0,3,4。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N = 2e5+10;
 6 typedef long long ll ;
 7 int a[N],b[N],c[N],n;
 8 int main()
 9 {
10     scanf("%d",&n);
11     for( int i = 0 ; i < n ; i++ ){
12         scanf("%d",&a[i]);
13     }
14     for( int i = 0 ; i < n ; i++ ){
15         scanf("%d",&b[i]);
16         c[i] = a[i] - b[i];
17     }
18     sort( c , c + n );
19     ll ans = 0 ;
20     for( int i = 0 ; i < n ; i++ ){
21         if( c[i] <= 0 ) continue ;
22         else{
23             int j = lower_bound( c , c + n , -c[i] + 1 ) - c ;
24             ans += i - j ;
25             //printf("( %d , %d)\n",i,i-j);
26         }
27     }
28     printf("%lld\n",ans);
29     return 0;
30 }

具体代码

原文地址:https://www.cnblogs.com/Osea/p/12562750.html

时间: 2024-10-04 22:23:16

【二分】Pair of Topics的相关文章

Codeforces Round #627 (Div. 3) D. Pair of Topics(二分/直接遍历)

The next lecture in a high school requires two topics to be discussed. The ii -th topic is interesting by aiai units for the teacher and by bibi units for the students. The pair of topics ii and jj (i<ji<j ) is called good if ai+aj>bi+bjai+aj>

Codeforces - 1324D - Pair of Topics(尺取)

题目链接 题目大意:让你找出所有\(ai+aj > bi+bj\)(i > j) ??其实这题不用在意\(i > j\)只要把\(i\neq j\)并且符合条件的一对数记做一个答案就行了...(显然通过\(i和j\)交换必有\(i > j\)).然后我们把\(ai+aj > bi+bj\)变形可得\((ai-bi)+(aj-aj) > 0\)所以我们把所有的\(ai\)和\(bi\)做差 得到数组\(d\),那么只有\(d\)数组中存在一对数满足两数之和大于0就是答案的

NodeJS制作爬虫全过程

这篇文章主要介绍了NodeJS制作爬虫的全过程,包括项目建立,目标网站分析.使用superagent获取源数据.使用cheerio解析.使用eventproxy来并发抓取每个主题的内容等方面,有需要的小伙伴参考下吧. 今天来学习alsotang的爬虫教程,跟着把CNode简单地爬一遍. 建立项目craelr-demo我们首先建立一个Express项目,然后将app.js的文件内容全部删除,因为我们暂时不需要在Web端展示内容.当然我们也可以在空文件夹下直接 npm install express

Codeforces Round #627 (Div. 3) 补题

CF1324A Yet Another Tetris Problem 长度为n的数组a中有一组数,可以任意使其中一项+2,问能否使a中所有项的值相同. 感觉div.3的题目更多地在考简化问题的能力--比如原题目以俄罗斯方块作背景,让我想到的是能不能消除所有方块,导致代码很难写.但如果像上述一样简化题意,方向就很明确了:只要判断是否所有数均为偶数/均为奇数即可. CF1324A-代码 #include<cstdio> #include<iostream> #include<cs

HDU 5042 GCD pair 预处理+二分 分段

点击打开链接 #include <stdio.h> #include <string.h> #include <iostream> #include <cmath> #include <algorithm> #include <vector> using namespace std; typedef long long ll; ll gcd(ll x, ll y){ if(x>y)swap(x,y); while(x){ y%=

POJ 2773 Happy 2006 二分+容斥(入门

题目链接:点击打开链接 题意: 输入n ,k 求与n互质的第k个数(这个数可能>n) 思路: solve(mid)表示[1,mid]中有多少个和n互质,然后二分一下最小的mid 使得互质个数==k solve(x) 实现: 与n互质的个数=所有数-与n不互质的数=所有数-(与n有一个因子-与n有2个因子的+与n有3个因子的) 状压n的因子个数,然后根据上面的公式容斥得到. #include <stdio.h> #include <iostream> #include <

hdu 1507 Uncle Tom&#39;s Inherited Land*(二分)

Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1853    Accepted Submission(s): 769 Special Judge Problem Description Your old uncle Tom inherited a piece of land fr

Two Famous Companies 【二分+最小生成树】

Problem DescriptionIn China, there are two companies offering the Internet service for the people from all cities: China Telecom and China Unicom. They both are planning to build cables between cities. Obviously, the government wants to connect all t

HDU 3622 Bomb Game(二分+2-SAT)

Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5396    Accepted Submission(s): 1925 Problem Description Robbie is playing an interesting computer game. The game field is an unbounde