牛客小白月赛61-E-排队

很好的一道题啊,学到了不少东西!!!!

首先是一个结论

逆序对总数 =    n! / 2  * 不相等的数字对数

(1) 不相等的数字对数怎么求

        结论        不相等的数字对数 = C(n,2) - ∑C(2,cnt(i))(i数字的出现次数)

(2) n! / 2 怎么处理,有取模的除运算怎么处理???

这块一直不会,今天一学才发现,就是之前学过的乘法逆元,学过就忘,不愧是我(doge

这里只说怎么处理,证明之类的不写了

a / b % mod 的情况,可以求b的乘法逆元

注意,b的乘法逆元存在是有条件的

逆元存在充要条件:分母与模数互质

下面是两种求法

(1) p为质数

        b的乘法逆元  x = qpow(b,mod - 2,mod),费马小定理,注意是mod - 2

(2)p不是质数

        那么就得用扩展欧几里得算法了

        实现代码

        

void Exgcd(int a, int b, int& x, int& y) {if (!b) x = 1, y = 0;else Exgcd(b, a % b, y, x), y -= a / b * x;
}

       对于求 a / b % mod的问题 用扩展欧几里得算法

      各参数含义:

        a: 这里的a其实是a / b里的b

        b:这里的b其实是p

        x:要求的逆元

        y:不知道

        注意,扩展欧几里得是可以有返回值的,这个返回值的意义就是a,b的gcd

   其实是exgcd(b,p,逆元x,路人y) return = b,p的gcd,不过这里用不到

求出逆元以后,就可以用 n! * 逆元 * 求出的不相等的数字数 % mod了

// Problem: 排队
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/46597/E
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// Date: 2024-03-14 21:21:51
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
#define endl '\n'
#define int int64_t
using namespace std;
int a[100005],rec[100005];
const int mod = 1e9 + 7;
int fac(int x) {if (rec[x]) return rec[x];if (x == 0)return rec[0] = 1;return rec[x] = (fac(x - 1) * x) % mod;
}
int qpow(int a,int b) {int res = 1;while (b) {if (b & 1)res = res * a % mod;a = a * a % mod, b >>= 1;}return res;
}
int C2(int x) {return x * (x - 1) / 2;
}
void exgcd(int a,int b,int&x ,int& y) {if (!b) x = 1, y = 0;else exgcd(b, a % b, y, x), y -= a / b * x;
}
void solve() {int n; cin >> n;fac(n);unordered_map<int, int>p;for (int i = 1; i <= n; ++i) {cin >> a[i];p[a[i]]++;}//逆序对总数 = n! / 2 * 不相等的数字对数int x, y;exgcd(2,mod, x, y);x = (x % mod + mod) % mod;int l = (rec[n] * x) % mod;/*cout << "x = " << x << endl;cout << "rec[n] = " << rec[n] << endl;*/int r = C2(n);for (auto k : p) {r -= C2(k.second);}/*cout << "l = " << l << endl;cout << "r = " << r << endl;*/cout << l * r % mod << endl;
}
signed main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t = 1;//cin >> t;while (t--) {solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240314 大模型快讯

//社区生态// 零一万物发布Yi大模型API开放平台。零一万物通过开放 API 让包括开发者在内的更多人用上强大的对话、多模态大模型&#xff0c;用来创作或用于工作。 //智能体// 全球首个OpenAI机器人诞生。初创公司Figure联合OpenAI&#xff0c;推出名为Figure 01的机器人&…

搭建谷歌Gemini

前言 Gemini是Google AI于2023年发布的大型语言模型&#xff0c;拥有强大的文本生成、理解和转换能力。它基于Transformer模型架构&#xff0c;并使用了大量文本和代码数据进行训练。Gemini可以执行多种任务&#xff0c;包括&#xff1a; 生成文本&#xff1a;可以生成各种类…

一张图让你学会Python

有编程基础的人一看就可以了解 Python 的用法了。真正的 30 分钟上手。 国外一高手画的&#xff0c;现把它翻译成中文&#xff0c;入门超简单 python入门神图!(看不清可以“另存为”查看)

go的slice学习

并发访问slice 线上出现一粒多协程并发append全局slice的情况&#xff0c;导致内存不断翻倍&#xff0c;因此对slice的使用需要重新考虑。 并发读写的情况下&#xff0c; 可以利用锁、channel等避免竞态 问题 func TestDemo32(t *testing.T) {var wg sync.WaitGroupvar n 1…

C++类和对象一

#include <iostream> using namespace std;//设计一个学生类 class CStudent {public: //公有成员void InputData(){cout << "请输入学号";cin >> sno;cout << "请输入姓名";cin >> sname;cout << "请输入分…

NAT笔记

NAT 用于实现私网和公网之间的互访。 静态NAT 静态NAT实现私网地址和公网地址的一对一转换。 有2种配置方法&#xff1a; 全局模式下设置静态NAT [R1]nat static global 172.10.10.10 inside 192.168.10.10 [R1]int g0/0/1 #外网出口 [R1-GigabitEthernet0/0/1]nat static…

③【Docker】Docker部署Nginx

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ③【Docker】Docker部署Nginx docker拉取nginx…

Linux环境下安装DGL及其CUDA

前段时间看到一篇AAAI2024的论文Patch-wise Graph Contrastive Learning for Image Translation&#xff0c;它采用GNN的思想来进行image-to-image translation的任务&#xff0c;非常的新颖&#xff0c;但我进行复现的时候&#xff0c;发现直接下载它里面需要的DGL库是无法运行…

MyBatis 之三:配置文件详解和 Mapper 接口方式

配置文件 配置文件中常用的元素&#xff1a; configuration 配置 properties 可以配置在Java 属性配置文件中 settings 修改 MyBatis 在运行时的行为方式 typeAliases 为 Java 类型命名一个别名&#xff08;简称&#xff09; typeHandlers 类型处理器 objectFactory 对象工厂 p…

第一次vp蓝桥杯

最失败的一集&#xff0c;这是学了个什么&#xff1f; 果然是一个很失败的人呢&#xff0c;第一次逃晚自习就被辅导员发现了呢&#xff0c;还给我打电话&#xff0c;虽然知道可能他也没办法。但这就更体现我很失败了。 题也不会写&#xff0c;其他的方面也不是很如意。嘻嘻嘻…

【Flutter 面试题】Flutter如何处理响应式布局?

【Flutter 面试题】Flutter如何处理响应式布局&#xff1f; 文章目录 写在前面口述回答补充说明完整代码示例运行结果详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&am…

QT--对象模型(对象树)

对象模型 在qt中创建对象的时候会提供一个parent对象指针Q0bject是以对象树的形式组织起来的。当你创建一个Q0bject对象时&#xff0c;会看到Q0bject的构造函数接收一个Q0bject_指针作为参数&#xff0c;这个参数就是parent&#xff0c;也就是父对象指针。这相当于&#xff0c…

NB-IoT模块

目录 一. NB-IoT模块实物图 二. BC20/NB-IoT模块产品规格 三. 指令顺序 1. AT判断BC20模组是否正常 2. ATE0返回OK&#xff0c;已经返回回显 3. ATCSQ 4. AT_CEREG? 5. ATCGATT? 6. ATCGATT? 四. OneNet 连接 1. AT 查看 NB(当前NB)&#xff0c;云平台根据这两个…

从顺序表到链表再到队列和栈

1.顺序表 顺序表&#xff0c;简单的说&#xff0c;就是一种用结构体储存的数组。只是一般顺序表还有着记录存入数据个数size和数组总空间位置个数capacity 我们要定义一个顺序表的结构体&#xff0c;就要先确定顺序表的储存的数据&#xff0c;然后假设数组是固定长度&am…

链表的分类有哪些?

1、典型回答 链表 (Linked List) 是一种常见的线性数据结构&#xff0c;由一系列节点(Node)组成。每个节点都包含数据(element) 和一个指向下一个节点的指针 (next) 。通过这种方式&#xff0c;每个节点可以按照顺序链接在一起&#xff0c;形成一个链表。 线性数据结构是一种常…

ArcGIS学习(十五)用地适宜性评价

ArcGIS学习(十五)用地适宜性评价 本任务给大家带来的内容是用地适宜性评价。 用地适宜性评价是大家在平时工作中最常接触到的分析场景之一。尤其是在国土空间规划的大背景下,用地适宜性评价变得越来越重要。 此外,我们之前的任务主要是使用矢量数据进行分析。本案例是主讲…

Java中的 “==” 与 equals 的区别

Java中的 “” 与 equals 的区别 1.“” 在Java中有两大类数据类型&#xff0c;一类是基础数据类型共有八种分别是byte、 short、 int、 long、 float、 double、 char、boolean&#xff0c;另一类则是引用数据类型&#xff0c;例如String、Integer等等。 “ ” 作为比较运算…

电商按关键字搜索temu商品 API

公共参数 名称类型必须描述keyString是免费申请调用key密钥&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheString否[yes,no]默…

切片上的健壮范型函数

在这篇博客文章中&#xff0c;我们将讨论如何通过了解切片在内存中的表示方式以及这对垃圾收集器的影响&#xff0c;更有效地使用slices包中提供的函数。我们还将介绍我们最近如何调整这些函数&#xff0c;使它们变得不那么令人惊讶。 借助类型参数&#xff0c;我们可以为所有…

为什么说PostgreSQL是面向对象的数据库?

PostgreSQL 官方宣称它是世界上最先进的开源对象-关系型数据库管理系统&#xff08;ORDBMS&#xff09;。相信大家对于关系型数据库并不陌生&#xff0c;它基于关系模型&#xff08;由行和列组成的二维表&#xff09;&#xff0c;定义了完整性约束并且使用 SQL 作为操作语言。 …