题目描述

链接: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;
}

注意与总结

  1. ans/2:存在两个元素在两种排序方式组合下有逆序对的情况(一定)。
    即考虑两个元素a、b,在三种排列顺序种,a的排名在b之前的次数可能为0、1、2、3。而可以产生逆序对的为1和2,那么只要两个元素间存在逆序对,就会被计数两次。
  2. 熟悉这种求以某序列为标准排序,求另一种序列的逆序数的方法:将元素的两种序列为位置写成结构体,将其sort成标准顺序,再按另一种序列的比较方法进行merge_sor
  3. merge的另一种写法是while( && ),最后用两个while把有剩余的部分直接移到临时的数组中。

知识补充

做题记录 Newcoder Contest (逆序数相关推荐

  1. 做题记录 Newcoder 逆序对 (组合、快速幂、快速乘

    题目描述 链接:https://ac.nowcoder.com/acm/contest/21763/1018 来源:牛客网 求所有长度为n的01串中满足如下条件的二元组个数: 设第i位和第j位分别位a ...

  2. CSDN 第六期编程竞赛做题记录

    CSDN 第六期编程竞赛做题记录 -- CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16 9.18周日闲来无视写一下 csdn 的编程题,每期编程 ...

  3. 2020.7月做题记录

    转眼就到了2020的下半年了-前方仍是一片茫然. 长期计划 prufer 序列 2020.07.02-2020.07.04 Problem Finished P2624 [HNOI2008]明明的烦恼 ...

  4. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  5. 概率期望题(期望 DP)做题记录

    概率期望题(期望 DP)做题记录 P3830 [SHOI2012]随机树 难点在于第二问:生成树的期望深度. 不 wei zhuo 捏,设 \(dp_{i,j}\) 表示已经有了 \(i\) 个叶子结 ...

  6. 数数题(计数类 DP)做题记录

    数数题(计数类 DP)做题记录 CF1657E Star MST 我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和. 完全图点数为 \(n ...

  7. 退役前的做题记录5.0

    退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树 ...

  8. Regional 做题记录 (50/50)

    写在前面 博主深感自己太弱了QAQ 于是有了一个刷水的想法,Regional的题目还是有很多考查思维的题目,所以这次是乱做50道思考题,可能会顺带做一些水题,这些题的简要题解会写到这篇博文里面,希望能 ...

  9. 【Pikachu】漏洞练习平台做题记录+原理解析(2.2)XSS姿势和技巧

    前言 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞. 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意. pikach ...

最新文章

  1. PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)
  2. rails3高级查询
  3. 关于web技术的一些见解
  4. intellij运行多个工程
  5. C# 对象与JSON字符串互相转换的三种方式
  6. java从端口获取数据库_Java之通过接口获取数据并用JDBC存储到数据库中
  7. zookeeper、hbase常见命令
  8. 对文件、字符串和byte数组进行MD5加密
  9. bat怎么发起网络请求_接口测试实战| GETPOST 请求区别详解
  10. 苹果手机如何用计算机,电脑怎么控制iPhone手机
  11. QT 如何在QPushButton上加载gif动图
  12. python的OOP机制
  13. pow函数需要注意的问题
  14. python:基于TCP协议接收数据并解析保存至redis内存库
  15. Gos —— 加载内核
  16. MBTI职业性格测试 测评报告
  17. 克里斯蒂安贝尔_克里斯蒂安贝尔现身机场,身材瘦到认不出来,蝙蝠侠又开始减重了...
  18. PHP 获取手机号运营商
  19. Oracle 19c VLDB and Partitioning Guide 第1章:Introduction to Very Large Databases 读书笔记
  20. deepin系统更新node

热门文章

  1. 计算机工业设计方向是学什么的,工业设计学什么 以后能做什么
  2. 【软考笔记】2. 操作系统基本原理
  3. rust怎么造双层_腐蚀rust双层防炸地基教学 rust伪分离图文教学
  4. word2016开机后首次打开非常慢_如何有效地提升电脑开机速速?4招让你10秒开机不是梦...
  5. 听《中国好歌曲》20140124
  6. 2022佛山潭洲陶瓷展召开新闻发布会 推出展会十大重点
  7. hadoop伪分布式环境的搭建配置整理
  8. 【为Android 应用创建 XML 布局】
  9. 第1次任务-面向对象设计(购物车)
  10. keepalived学习记录