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 分而治之+排列组合相关推荐

  1. CodeForces - 1324D Pair of Topics (分治+排序)

    CodeForces - 1324D Pair of Topics 题目大意: 这题大意ai+aj>bi+bj全在这个式子上,就问你满足的组合有几种, 题目分析: 整理一下,得到(ai-bi)+ ...

  2. CodeForces - 1324D Pair of Topics(思维+二分)

    题目链接:https://vjudge.net/contest/362265#problem/D The next lecture in a high school requires two topi ...

  3. Codeforces 1324D Pair of Topics

    题目链接:https://codeforces.com/contest/1324/problem/D 题目描述 有两个长度为 n 的数组 A, B.问有多少对 (i,j) 满足 i < j 且 ...

  4. CodeForces - 1324D Pair of Topics(二分或双指针)

    题意:略 题记: 做法一:二分 #include<bits/stdc++.h>using namespace std; typedef long long ll; const int N= ...

  5. [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 ...

  6. [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)

    [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...

  7. cf 1324D. Pair of Topics

    D. Pair of Topics 题意:给定ab序列,问i<j且ai+aj>bi+bj的对数. 转化:ai-bi<-(aj-bj) 一开始拿到题目想着sort,但是发现i<j ...

  8. [Codeforces 893E. Counting Arrays]排列组合

    [Codeforces 893E. Counting Arrays]排列组合 分类:combinatorics number theory math 1. 题目链接 [Codeforces 893E. ...

  9. Codeforces Gym 100187D D. Holidays 排列组合

    D. Holidays Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/D ...

最新文章

  1. 智慧电梯物联网 未来电梯将更智能
  2. python 透视变换补边
  3. python执行命令并返回结果集_Python接口测试结果集实现封装比较
  4. css画横线箭头_用CSS绘制三角形箭头
  5. 妙用0元素数组 实现大小可变结构体
  6. 中国联通SDN/NFV的思考与实践
  7. 前端开发笔记(2)css基础(上)
  8. jdbc获取结果行数,如何获取JDBC中的行数?
  9. SpringBoot 精通系列-使用Swagger2构建RESTful APIs
  10. 双侧检验的p值和单侧检验_【单侧检验和双侧检验的区别】_怎么检验_如何检验-大众养生网...
  11. PyTorch入门(三)损失函数与反向传播
  12. 好项目,不私藏!适用于单片机开发的开源轮子
  13. matlab-norm函数
  14. poi批量导入html,读取excel(POI)【转换为html】 - bcoffee的专栏 - 博客频道 - CSDN.NET...
  15. Ubuntu18中调用cv2.imshow及PIL库遇到的bug “: cannot connect to X server”及display-im6.q16: unable to open X。。。
  16. [回顾]windows安装mujoco200
  17. android 输入法 智能abc 风格,音形结合——智能ABC输入法的一大诀窍
  18. 简易计算机android教程视频,制作视频,你也可以!——小白视频编辑制作简易教程...
  19. 滴滴是如何对用户和司机进行派单匹配的?
  20. Linux中more命令的使用,Linux中more命令使用详解教程

热门文章

  1. csgo跑图文件_一键跑图!极为方便的CSGO跑图工具(附2020年5月28日更新)
  2. Eclipse中Java项目转化为Java Web项目
  3. [MySQL]-主从同步实战-主从搭建
  4. JavaScript 验证码制作
  5. 免费把你的 GoogleDrive 和 OneDrive 变成 CDN
  6. 烤仔的朋友们丨Totle 是什么?
  7. 【Linux-scp】scp命令
  8. 猴子年华、教你如何关闭微信朋友圈广告
  9. cv::fitLine用法
  10. html表格中复选框代码怎么写,获取html表中的选中复选框