Japanese Student Championship 2019 Qualification B - Kleene Inversion(规律 + 快速乘)
题目链接————
题意大致是给你一个数列,然后给你一个k,表示一串数字有k个这样的数列组成,问一串数的逆序数是多少?
eg:
2 2 2 1
In this case, B = 2, 1, 2, 1 逆序数为 3
思路:
这题k的范围为1e9
所以肯定要找规律。
拿 132132132 来说,它是由3个132组成,所以先求出132的逆序数,假设为num1,他有3个,所以3*num1。然后该计算不同132的逆序数了。
先求出 在132中,每一个数字有多少个比它小了,然后在加和。假设为num2。
对于132 132 132而言,第二个132序列中有num2个比第一个132序列小的数,第三个132序列有num2个比第一个132序列小的数,第3个132序列有num2个b比第2个132序列小的数。
所以推广到一般 ,
最后的逆序数 = num1 * k + num2*(k-1 + k-2 + k-3 +..........+ 1)
= num1 * k + num2 * (k-1)*k/2
由于k的范围比较大,所以用快速乘算乘法就可以了。
AC Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6;
LL n,m;
LL res[10052];
LL fast_mul(LL a,LL b,LL Mod)
{LL c = a*b - (LL)((long double)a*b/Mod + 0.5)*Mod;return c<0? c+Mod : c;
}
LL M = (LL)1e9 + 7;
int main()
{
#ifndef ONLINE_JUDGE// freopen("input.txt","r",stdin);// freopen("output.out","w",stdout);
#endif // ONLINE_JUDGEcin>>n>>m;for(int i = 1; i<=n; ++i){cin>>res[i];}LL num1= 0,num2 =0;for(int i = 1; i<n; ++i){for(int j = i+1; j<=n; ++j){if(res[i]>res[j])num1 ++;}}sort(res+1,res+n+1,greater<LL>());for(int i = 1; i<n; ++i){for(int j = i+1; j<=n; ++j){if(res[i]>res[j])num2++;}}LL K = m,P = m;if(K%2==0)K = m/2,P = m-1;elseK = m,P = (m-1)/2;cout<<(fast_mul(num1,m,M)%M + fast_mul(K,P,M)*num2%M )%M<<endl;}
Japanese Student Championship 2019 Qualification B - Kleene Inversion(规律 + 快速乘)相关推荐
- 【AtCoder】Japanese Student Championship 2019 Qualification题解
Japanese Student Championship 2019 Qualification题解 A. Takahashi Calendar ◇题目传送门◆ 题目大意 定义Product Day为 ...
- Japanese Student Championship 2021 D - Nowhere P(递推 + 快速幂)
传送门 这题很明显存在一个递推关系,思考了一下果然如此. 设dp[i][j]为前i项的和膜p为j的方案数,显然dp[i+1][j] = sum(dp[i][k]), (k + j != p), 那么问 ...
- Visual Studio 2019/2017 安装使用教程(快速上手版)
Visual Studio 2017 安装使用教程(详细) 在此鸣谢范华对本文工作的大力支持 一.下载 二.安装 2017版本新建项目过程 2019版本新建项目过程 新建源文件 然后你就可以简单编写一 ...
- [蓝桥杯2019初赛]矩形切割-找规律
代码如下: #include <iostream> using namespace std;int main() {int a, b;int ans = 1;cin >> a ...
- Benelux Algorithm Programming Contest 2019 G. Gluttonous Goop 思维规律题
我们模拟后发现: 当病菌都连在一起时: 形成一个多边形,我们把他填补可以得到一个最小矩形. 把这个多边形它感染一次后:又得到一个多边形,把新的多边形填补得到新的矩形,发现:两个矩形内的未被感染的数量都 ...
- (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各
定义一个描述学生基本情况的类Student,数据成员包括姓名.学号.英语成绩和高数成绩:成员函数包括构造函数.析构函数.获取姓名.获取学号.求出平均成绩,以及显示各科成绩和平均成绩的显示函数.编写ma ...
- Microsoft office 家庭学生版(Home Student)下载地址
记录Microsoft office 家庭学生版下载地址 Hi!这是一篇资源下载记录呀! 之前一直觉着office专业版应该最好吧,然后每次安装都整了个全家桶--直到我发现,家庭学生版只安装Word. ...
- 2019年最新最全运维技能图谱
作者:南非蚂蚁 来源:https://blog.51cto.com/ixdba 运维是一个融合多学科(网络.系统.开发.安全.应用架构.存储等)的综合性技术岗位,从最初的网络管理(网管)发展到现在的系 ...
- 2019运维技能风向标
运维是一个融合多学科(网络.系统.开发.安全.应用架构.存储等)的综合性技术岗位.从最初的网络管理(网管)发展到现在的系统运维工程师.网络运维工程师.安全运维工程师.运维开发工程师等,可以看出,运维的 ...
- 【今日CS 视觉论文速览】1 Jan 2019
今日CS.CV计算机视觉论文速览 Tue, 1 Jan 2019 Totally 52 papers Interesting: 图片快速视觉效果增强算法,基于Ignatov的算法提高图像的感知质量,利 ...
最新文章
- Parser Generator Tips翻译(中英对译) by Joshua Xu
- HighCharts基本使用
- 数据挖掘原理与算法:练习题2
- Python matplotlib高级绘图详解
- EXCEL数字前补零且转换成文本型
- Java动态代理的应用
- 为什么我的论文没人引用?
- wms地图绘制工具_移情地图,了解用户需求的利器
- Chromium Microsoft Edge 浏览器现已可供下载
- 以太坊geth区块链私链建立
- LeetCode57 Insert Interval
- cookie代码加时间多久出现一次_一文彻底搞懂Cookie、Session、Token到底是什么
- 华为机试——整理数字字符串
- jar httpclient 少包,此处 区别 common-http包
- echo, print, printf 和 sprintf 区别(PHP)
- 折腾手机与平板的心得体会
- 如何批量导出QQ空间相册到电脑中
- URP——后期处理特效——通道混合器Channel Mixer
- 通过虚拟机搭建个人NAS
- 「YGG Japan」宣布已完成约 295 万美元的新股权私募