結果
| 問題 |
No.1311 Reverse Permutation Index
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-12-19 20:38:03 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,500 ms |
| コード長 | 1,131 bytes |
| コンパイル時間 | 1,583 ms |
| コンパイル使用メモリ | 169,812 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-21 10:35:08 |
| 合計ジャッジ時間 | 2,097 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 6 |
ソースコード
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define chmin(x,y) x = min((x),(y));
#define chmax(x,y) x = max((x),(y));
using namespace std;
using ll = long long ;
using P = pair<int,int> ;
using pll = pair<long long,long long>;
const int INF = 1e9;
const long long LINF = 1e17;
const int MOD = 1000000007;
//const int MOD = 998244353;
const double PI = 3.14159265358979323846;
ll p[22];
int main(){
p[0] = 1;
for(int i=1;i<=20;i++) p[i] = p[i-1] * i;
ll n,s;
cin >> n >> s;
vector<ll> a(s);
vector<int> seen(s,0);
rep(i,s){
int c = n / p[s-i-1];
rep(j,s){
if(c==0 && seen[j]==0){
a[i] = j;
seen[j] = 1;
break;
}
if(seen[j]==0) --c;
}
n %= p[s-i-1];
}
vector<int> b(s,0);
rep(i,s){
b[a[i]] = i;
}
ll ans = 0;
rep(i,s){
int c = 0;
rep(j,s){
if(seen[j] == 1 && j < b[i]) ++c;
if(j == b[i]) seen[j] = 0;
}
ans += c * p[s-i-1];
}
cout << ans << endl;
return 0;
}