题目链接:会议座位 - 洛谷

题目背景

话说校长最近很喜欢召开全校教职工大会,让老师们强行听他装逼

题目描述

现在校长在校园网上公布了一份座位表,n 位老师从左到右依次排成一行。老师们都对这个座位很满意。

然而到了开会时,校长不小心把座位表打乱了,老师们很不满。老师们并不在意自己的位置变了多少,但如果有一对老师 a 和 b,他们原来的座位是 a 在 b 左边,现在变成了 a 在 b 右边,那么这一对老师便会贡献一单位不满值。

校长想知道这些老师的总不满值是多少。

输入格式

第一行一个正整数 n,为 n 位老师。

第二行有 n 个字符串,每个字符串代表老师的名字(大小写敏感)。这一行代表原来的座位表。

第三行有 n 个字符串,代表打乱后的座位表。

输出格式

一行,一个正整数,表示老师们的总不满值。

输入输出样例

输入

3
Stan Kyle Kenny
Kyle Stan Kenny

输出

1

输入

5
A B C D E
B A D E C

输出

3

题解:

明显求逆序对,不过转化了一种形式,为字符串的逆序对。考虑用map离散化后哈希到数组中,转化为熟悉的归并排序求逆序对。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define fast std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);inline int read()
{int x=0,k=1; char c=getchar();while(c<'0'||c>'9'){if(c=='-')k=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*k;
}
const int maxn=1e5+10;
int b[maxn],n,a[maxn],ans;
map<string,int>m;
string s;
void mergesort(int l,int r){if(l>=r) return ;int mid=(l+r)>>1;mergesort(l,mid);mergesort(mid+1,r);int i=l,j=mid+1,k=l;while(i<=mid&&j<=r){if(a[i]<a[j])b[k++]=a[i++];elseb[k++]=a[j++],ans+=mid-i+1;}while(i<=mid){b[k++]=a[i++];}while(j<=r){b[k++]=a[j++];}for(int i=l;i<=r;i++) a[i]=b[i];
}
signed main(){fastcin>>n;for(int i=1;i<=n;i++){cin>>s;m[s]=i;}for(int i=1;i<=n;i++){cin>>s;a[m[s]]=i;}//离散化,用map哈希。mergesort(1,n);cout<<ans;
}

STL大法好!

P5149 会议座位(逆序对 离散化 hash 归并排序)相关推荐

  1. P5149 会议座位(逆序对)

    P5149 会议座位(逆序对) 看到本题有字典树就来了,结果直接map下,也可做. 思路1:map,然后上BIT. 思路2:字典树实现类map,然后上BIT. code #include<bit ...

  2. 洛谷P5149——会议座位【字典树 + 逆序对】

    洛谷P5149--会议座位 大致思路:我们先用字典树把单词存起来,在每个单词的末尾节点给这个单词按照出现顺序标号,然后在查找的过程中,把其出现顺序用一个数组一次存起来,然后求这个数组的逆序对即可. # ...

  3. [Luogu] 逆序数P5149 会议座位

    P5149 会议座位 目录 前言 归并排序求逆序数 tire+树状数组求 逆序数 前言 这题的标签 有trie感觉奇奇怪怪的 没想到trie树还可以搞这个 牛逼66 归并排序求逆序数 #include ...

  4. P5149 会议座位

    P5149 会议座位 题意: 其实还是求逆序对数. 解法: 用离散化统计每个数,再用树状数组求逆序对. CODE: #include<iostream> #include<cstdi ...

  5. 洛谷 P5149 会议座位

    洛谷 P5149 会议座位 Description 现在校长在校园网上公布了一份座位表,n位老师从左到右依次排成一行.老师们都对这个座位很满意. 然而到了开会时,校长不小心把座位表打乱了,老师们很不满 ...

  6. 洛谷P5149 会议座位

    P5149 会议座位 字符串哈希 + 归并排序 代码 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10 ...

  7. 【洛谷】P5149 会议座位

    题目地址: https://www.luogu.com.cn/problem/P5149 题目背景: 话说校长最近很喜欢召开全校教职工大会,让老师们强行听他装逼 题目描述: 现在校长在校园网上公布了一 ...

  8. AcWing 788 逆序对的数量-归并排序

    给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j] ,则其为一个逆序对:否则不 ...

  9. -9 逆序输出一个整数的各位数字_逆序对个数(归并排序)

    题目描述 输入 N 组数据,对每组数据输出逆序对个数. 输入 对于每组测试用例,第一行输入此组数据元素个数 x,接下来 x 行,每行一个数,表示元素.(1≤x≤500000)(1≤x≤500000) ...

最新文章

  1. highcharts使用教程
  2. 北斗导航 | 完全自主研发国产高端三维激光雷达助力中国测绘技术发展
  3. Java并发学习之一——线程的创建
  4. x64汇编第三讲,64位调用约定与函数传参.
  5. 数据:DOGE近24小时交易额约为107.91亿美元
  6. Myeclipse和 eclipse中的控制台汉字横着显示修改
  7. MicropPython的学习,如何从0到1?
  8. 2011年Esri用户大会技术亮点总结之一:概览
  9. 马士兵servletjsp视频教程——第二部分jsp笔记及源代码、servlet和jsp的通信
  10. 尘埃落定!清华才子王垠​加入华为职级 22,前阿里 P10 赵海平加入字节跳动,职级或为 4+...
  11. 关于FileOpen2插件安装apk时闪退的解决办法
  12. netcfg 进程分析
  13. kvm实战之搭建一个web服务来进行ks.cfg文件的引导(三)
  14. HDU 1224 DFS
  15. 解决 primordials is not defined 问题
  16. Shinobi视频监控平台
  17. SSDAlloc:用 SSD 扩展内存
  18. 宝剑配英雄,玫瑰赠伊人!(祝全天下静姝妇女节快乐!)
  19. java中Date计算时间差
  20. 少年,请多一些开疆拓土的勇气——写给在C和C++间犹豫的学生

热门文章

  1. 转:激励,如何做更有效
  2. 数据科学的原理与技巧 五、探索性数据分析
  3. 浅谈智慧医疗中常见的几种数据标注类型
  4. 区块链金融中的python应用--LSM定价
  5. 双11购物狂欢已经开始,店宝宝:火热的直播电商正待加码
  6. 输出指定位数的最小斐波纳契数
  7. 【Markdown】编辑器使用技巧大汇总3。省略号的表示,常见希腊字母($\lambda$ 等),常见数学符号($\times$ 等),三角函数表示符号,微积分表示符号,逻辑运算符(因为所以)
  8. Thinking in Flex
  9. C语言 输入一个5行5列的数组。1.求数组主对角线上元素的和。2.求出辅对角线上元素的积。3.找出主对角线上最大的值及其位置
  10. WebSocket接收多种子协议