Submission

Status:

PPPPPPPPPPPPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: mrblbb

Problemset: สุ่มสลับ

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-13 11:56:31

#include <stdio.h>
#include <string.h>

long long fac(int n){
    if (n==0 || n==1){
        return 1;
    } else{
        return n* fac(n-1);
    }
}

int main(){
    int n;
    long long order=0;
    scanf("%d", &n);
    char str[n+1], sort[n+1];
    scanf("%s", str);
    strcpy(sort,str);
    for (int i=1; i<n; i++){
        for (int j=0; j<n-i; j++){
            if (sort[j] > sort[j+1]){
                char temp = sort[j];
                sort[j] = sort[j+1];
                sort[j+1]= temp;
            }
        }
    }
    int g=0;
    for (int i=0; i<n; i++){
        g=-1;
        for (int j=0; j<n; j++){
            if (sort[j]!='-'){
                g++;
            }
            if (str[i] == sort[j]){
                order += fac(n-i-1) * g;
                sort[j] = '-';
                break;
            }
        }
    }
    printf("%lld", order+1);
}