专栏文章
题解:AT_jsc2019_qual_b Kleene Inversion
AT_jsc2019_qual_b题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miqpx7as
- 此快照首次捕获于
- 2025/12/04 08:49 3 个月前
- 此快照最后确认于
- 2025/12/04 08:49 3 个月前
思路:
因为共有 段 序列,所以逆序对分为两种:
- 在不同的 序列中。
- 在相同的 序列中。
第 种情况就是求出 ,, 组成的数对的个数乘上 ,表示对于所有第 个序列和第 个序列组成的数对,保证 。
第 种情况就是在所有 个序列中的逆序对,共有 序列的逆序对个数乘上 。
Code:
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
#define il inline
int n,a[2005],k,s,ss;
const int mod=1e9+7;
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[j]>a[i])s++,s%=mod;
}
}
int kk=k*(k-1)/2;
kk%=mod;
s*=kk;
s%=mod;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[j]<a[i])ss++;
}
}
// cout<<s<<" "<<kk<<" "<<ss<<" "<<k<<'\n';
cout<<(s+ss*k%mod)%mod;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...