[codeforces 1324D] Pair of Topics 分而治之+排列组合
Codeforces Round #627 (Div. 3) 比赛人数6434
[codeforces 1324C] Frog Jumps 一直向右+边界处理
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
也在线测评地址http://codeforces.com/contest/1324/problem/D
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
D - Pair of Topics | GNU C++11 | Accepted | 93 ms | 2200 KB |
第一次能在比赛中AC掉D题,虽然是Div. 3的难度,但也是可喜可贺。从AC的时间上看,离比赛结束只有2分零几秒。
上一场比赛,要是多给5分钟,就能在上一场的Div. 2比赛中AC掉D题了。
涨码力了。
该题的突破公式ai+aj>bi+bj变换一下,变成(ai-bi)+(aj-bj)>0,就这么一变换,算法就呼之欲出。怎么想到的?
当时是这样的,计算ai+aj,bi+bj觉得对应着O(n^2)的算法,就想着,作差试试,于是就一发不可收拾,想到了对应的算法。
将差值分为a-b>0,a-b<=0两组进行讨论。
手工算法如下
Input:
5
4 8 2 6 2
4 5 4 1 3
Output:
7a 4 8 2 6 2
b 4 5 4 1 3
a-b 0 3 -2 5 -1a-b>0 3 5
a-b<=0 -2 -1 0可能的组合(3,5),(3,-2),(3,-1),(3,0),(5,-2),(5,-1),(5,0)可以这样考虑
a-b>0 3 5有2个数据,选2个,C(2,2)=1
a-b<=0的数据取绝对值,对绝对值,自小到大排序0,1,2
0<3,可以配对
1<3,可以配对
2<3,可以配对
与3可以配对的情况有3种,
因5>3,与3可以配对的,一定可以与5配对,就不要重复计算了。该题与5可以配对的情况有3种,
答案为1+3+3=7
#include <cstdio>
#include <algorithm>
#define LL long long
#define maxn 200010
using namespace std;
int a[maxn],b[maxn],bn,c[maxn],cn;
int main(){int n,i,j;LL ans=0;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=1;i<=n;i++)scanf("%d",&b[i]);for(i=1;i<=n;i++)a[i]-=b[i];sort(a+1,a+1+n);for(i=1;i<=n;i++)if(a[i]<=0)b[++bn]=a[i];//b[]存储差值<=0else c[++cn]=a[i];//c[]存储差值>0ans+=(LL)cn*(cn-1)/2;//正数集合里随便选j=1;for(i=1;i<=bn;i++)b[i]=-b[i];//对非正数集合取绝对值sort(b+1,b+1+bn);//绝对值按自小到大排列for(i=1;i<=bn;i++){while(j<=cn&&b[i]>=c[j])j++,ans+=(i-1);//i-1之前数据包括i-1位置的数据都可以与c[j]配对if(j>cn)break;//正数集合处理完毕}if(j>cn)printf("%lld\n",ans);else{ans+=(LL)bn*(cn-j+1);//正数集合中剩下数据的处理printf("%lld\n",ans);}return 0;
}
[codeforces 1324D] Pair of Topics 分而治之+排列组合相关推荐
- CodeForces - 1324D Pair of Topics (分治+排序)
CodeForces - 1324D Pair of Topics 题目大意: 这题大意ai+aj>bi+bj全在这个式子上,就问你满足的组合有几种, 题目分析: 整理一下,得到(ai-bi)+ ...
- CodeForces - 1324D Pair of Topics(思维+二分)
题目链接:https://vjudge.net/contest/362265#problem/D The next lecture in a high school requires two topi ...
- Codeforces 1324D Pair of Topics
题目链接:https://codeforces.com/contest/1324/problem/D 题目描述 有两个长度为 n 的数组 A, B.问有多少对 (i,j) 满足 i < j 且 ...
- CodeForces - 1324D Pair of Topics(二分或双指针)
题意:略 题记: 做法一:二分 #include<bits/stdc++.h>using namespace std; typedef long long ll; const int N= ...
- [Codeforces Round #627]1324D - Pair of Topics[二分]
1324D - Pair of Topics[二分] time limit per test memory limit per test input output 2 seconds 256 mega ...
- [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...
- cf 1324D. Pair of Topics
D. Pair of Topics 题意:给定ab序列,问i<j且ai+aj>bi+bj的对数. 转化:ai-bi<-(aj-bj) 一开始拿到题目想着sort,但是发现i<j ...
- [Codeforces 893E. Counting Arrays]排列组合
[Codeforces 893E. Counting Arrays]排列组合 分类:combinatorics number theory math 1. 题目链接 [Codeforces 893E. ...
- Codeforces Gym 100187D D. Holidays 排列组合
D. Holidays Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/D ...
最新文章
- 智慧电梯物联网 未来电梯将更智能
- python 透视变换补边
- python执行命令并返回结果集_Python接口测试结果集实现封装比较
- css画横线箭头_用CSS绘制三角形箭头
- 妙用0元素数组 实现大小可变结构体
- 中国联通SDN/NFV的思考与实践
- 前端开发笔记(2)css基础(上)
- jdbc获取结果行数,如何获取JDBC中的行数?
- SpringBoot 精通系列-使用Swagger2构建RESTful APIs
- 双侧检验的p值和单侧检验_【单侧检验和双侧检验的区别】_怎么检验_如何检验-大众养生网...
- PyTorch入门(三)损失函数与反向传播
- 好项目,不私藏!适用于单片机开发的开源轮子
- matlab-norm函数
- poi批量导入html,读取excel(POI)【转换为html】 - bcoffee的专栏 - 博客频道 - CSDN.NET...
- Ubuntu18中调用cv2.imshow及PIL库遇到的bug “: cannot connect to X server”及display-im6.q16: unable to open X。。。
- [回顾]windows安装mujoco200
- android 输入法 智能abc 风格,音形结合——智能ABC输入法的一大诀窍
- 简易计算机android教程视频,制作视频,你也可以!——小白视频编辑制作简易教程...
- 滴滴是如何对用户和司机进行派单匹配的?
- Linux中more命令的使用,Linux中more命令使用详解教程