- #include < map > #include < cstdio > #include < cstring > #include < iostream > #include < algorithm > using namespace std;
- int n,
- m,
- vis[21];
- long long num[21];
- int main() {
- //freopen("permutation.in","r",stdin);
- //freopen("permutation.out","w",stdout);
- scanf("%d%d", &n, &m);
- for (int i = 1; i <= 21; i++) num[i] = 1;
- for (int i = 2; i <= n; i++) num[n - i + 1] = i * num[n - i + 2];
- for (int k = 1; k <= m; k++) {
- char c;
- long long x;
- cin >> c;
- memset(vis, 0, sizeof(vis));
- if (c == ‘P‘) {
- cin >> x;
- long long k = x;
- int flag = 1;
- for (int i = 1; i <= n; i++) {
- int ans;
- if (k >= num[i + 1]) {
- long long a = k / num[i + 1];
- long long nn = k % num[i + 1];
- if (nn) flag = 1;
- else flag = 0;
- int bns = 0;
- for (int j = 1; j <= n; j++) {
- if (!vis[j]) bns++;
- if (bns - flag == a) {
- ans = j;
- vis[j] = 1;
- break;
- }
- }
- k = nn;
- } else {
- if (flag == 1) {
- for (int j = 1; j <= n; j++) if (!vis[j]) {
- ans = j;
- vis[j] = 1;
- break;
- }
- } else {
- for (int j = n; j >= 1; j--) if (!vis[j]) {
- ans = j;
- vis[j] = 1;
- break;
- }
- }
- }
- cout << ans << " ";
- }
- cout << endl;
- } else {
- long long ans = 0;
- for (int i = 1; i <= n; i++) {
- cin >> x;
- int bns = 0;
- for (int j = 1; j <= n; j++) {
- if (!vis[j]) bns++;
- if (j == x) break;
- }
- bns--;
- vis[x] = 1;
- ans += (long long) bns * num[i + 1];
- }
- cout << ans + 1 << endl;
- }
- }
- }
来源: http://www.bubuko.com/infodetail-2294450.html