做题记录 Newcoder Contest (逆序数
题目描述
链接:https://ac.nowcoder.com/acm/contest/21763/1021
来源:牛客网
n支队伍一共参加了三场比赛。
一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高。
求有多少组(x,y),使得x自己觉得比y强,y自己也觉得比x强。
(x, y), (y, x)算一组。
题意
n个元素有3种排列顺序,求以其中一种顺序为标准顺序下另两种排列顺序的逆序对个数。(不同顺序选择下相同的两个元素组成的逆序对算作同一种组合)
思路
利用归并排序的merge过程求逆序数
code
#include<bits/stdc++.h>
#define DEBUG(x) (cout<<#x<<':'<<x<<' ')
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
// const int mod=1e9+7;
const int N=2e5+10;
struct team
{int a,b,c;
}arr[N];
int A[N],B[N];
ll ans=0;bool cmp_a(team t1,team t2)
{return t1.a<t2.a;
}bool cmp_b(team t1,team t2)
{return t1.b<t2.b;
}void merge_sort(int l,int r)
{if(r-l<2)return;int mid=l+(r-l)/2;int p=l,q=mid,i=l;merge_sort(l,mid);merge_sort(mid,r);while(p<mid||q<r){if(q>=r||p<mid&&A[p]<=A[q])B[i++]=A[p++];else{B[i++]=A[q++];ans+=mid-p;}}for(i=l;i<r;i++)A[i]=B[i];
}
void solv()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>arr[i].a>>arr[i].b>>arr[i].c;sort(arr,arr+n,cmp_a);for(int i=0;i<n;i++)A[i]=arr[i].b;merge_sort(0,n);//a,bfor(int i=0;i<n;i++)A[i]=arr[i].c;merge_sort(0,n);//a,csort(arr,arr+n,cmp_b);for(int i=0;i<n;i++)A[i]=arr[i].c;merge_sort(0,n);//b,ccout<<ans/2<<'\n';
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T=1;// cin>>T;while(T--){solv();}return 0;
}
注意与总结
- ans/2:存在两个元素在两种排序方式组合下有逆序对的情况(一定)。
即考虑两个元素a、b,在三种排列顺序种,a的排名在b之前的次数可能为0、1、2、3。而可以产生逆序对的为1和2,那么只要两个元素间存在逆序对,就会被计数两次。- 熟悉这种求以某序列为标准排序,求另一种序列的逆序数的方法:将元素的两种序列为位置写成结构体,将其sort成标准顺序,再按另一种序列的比较方法进行merge_sor
- merge的另一种写法是while( && ),最后用两个while把有剩余的部分直接移到临时的数组中。
知识补充
做题记录 Newcoder Contest (逆序数相关推荐
- 做题记录 Newcoder 逆序对 (组合、快速幂、快速乘
题目描述 链接:https://ac.nowcoder.com/acm/contest/21763/1018 来源:牛客网 求所有长度为n的01串中满足如下条件的二元组个数: 设第i位和第j位分别位a ...
- CSDN 第六期编程竞赛做题记录
CSDN 第六期编程竞赛做题记录 -- CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16 9.18周日闲来无视写一下 csdn 的编程题,每期编程 ...
- 2020.7月做题记录
转眼就到了2020的下半年了-前方仍是一片茫然. 长期计划 prufer 序列 2020.07.02-2020.07.04 Problem Finished P2624 [HNOI2008]明明的烦恼 ...
- 退役前的做题记录1.0
退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...
- 概率期望题(期望 DP)做题记录
概率期望题(期望 DP)做题记录 P3830 [SHOI2012]随机树 难点在于第二问:生成树的期望深度. 不 wei zhuo 捏,设 \(dp_{i,j}\) 表示已经有了 \(i\) 个叶子结 ...
- 数数题(计数类 DP)做题记录
数数题(计数类 DP)做题记录 CF1657E Star MST 我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和. 完全图点数为 \(n ...
- 退役前的做题记录5.0
退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树 ...
- Regional 做题记录 (50/50)
写在前面 博主深感自己太弱了QAQ 于是有了一个刷水的想法,Regional的题目还是有很多考查思维的题目,所以这次是乱做50道思考题,可能会顺带做一些水题,这些题的简要题解会写到这篇博文里面,希望能 ...
- 【Pikachu】漏洞练习平台做题记录+原理解析(2.2)XSS姿势和技巧
前言 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞. 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意. pikach ...
最新文章
- PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)
- rails3高级查询
- 关于web技术的一些见解
- intellij运行多个工程
- C# 对象与JSON字符串互相转换的三种方式
- java从端口获取数据库_Java之通过接口获取数据并用JDBC存储到数据库中
- zookeeper、hbase常见命令
- 对文件、字符串和byte数组进行MD5加密
- bat怎么发起网络请求_接口测试实战| GETPOST 请求区别详解
- 苹果手机如何用计算机,电脑怎么控制iPhone手机
- QT 如何在QPushButton上加载gif动图
- python的OOP机制
- pow函数需要注意的问题
- python:基于TCP协议接收数据并解析保存至redis内存库
- Gos —— 加载内核
- MBTI职业性格测试 测评报告
- 克里斯蒂安贝尔_克里斯蒂安贝尔现身机场,身材瘦到认不出来,蝙蝠侠又开始减重了...
- PHP 获取手机号运营商
- Oracle 19c VLDB and Partitioning Guide 第1章:Introduction to Very Large Databases 读书笔记
- deepin系统更新node
热门文章
- 计算机工业设计方向是学什么的,工业设计学什么 以后能做什么
- 【软考笔记】2. 操作系统基本原理
- rust怎么造双层_腐蚀rust双层防炸地基教学 rust伪分离图文教学
- word2016开机后首次打开非常慢_如何有效地提升电脑开机速速?4招让你10秒开机不是梦...
- 听《中国好歌曲》20140124
- 2022佛山潭洲陶瓷展召开新闻发布会 推出展会十大重点
- hadoop伪分布式环境的搭建配置整理
- 【为Android 应用创建 XML 布局】
- 第1次任务-面向对象设计(购物车)
- keepalived学习记录