(原谅我我实在不想粘题目了)
题目解读
这道题吧,本来不想加进来的。。其实就是对于八数码问题的一个补充,上面可爱的出题人已经将康拓展开讲的很清楚了。照着敲就行。
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read() {
ll x = 0 , f = 1; char ch = getchar();
for ( ; !isdigit(ch) ; ch = getchar()) if (ch == '-') f = -1;
for ( ; isdigit(ch) ; ch = getchar()) x = x * 10 + ch - '0';
return x * f;
}
const ll maxn = 3e3 + 1;
const ll mod = 1e9 + 7;
ll a[maxn];
ll n;
ll Cantor(ll s[]) {
ll sum = 0;
for (ll i = 1 ; i <= n ; i ++) {
ll cnt = 0;
for (ll j = i + 1 ; j <= n ; j ++) {
if (s[i] > s[j]) {
cnt ++;
}
}
ll fac = 1;
for (ll j = 1 ; j <= n - i ; j ++) {
fac *= j;
fac %= mod;
}
sum += (cnt * fac) % mod;
sum %= mod;
}
return sum + 1;
}
int main() {
n = read();
for (ll i = 1 ; i <= n ; i ++) {
a[i] = read();
}
printf("%lld\n" , Cantor(a));
}