如果用a b c d這4個字母組成乙個串,有4!=24種,如果把它們排個序,每個串都對應乙個序號:##algorithmabcd 0
abdc 1
acbd 2
acdb 3
adbc 4
adcb 5
bacd 6
badc 7
bcad 8
bcda 9
bdac 10
bdca 11
cabd 12
cadb 13
cbad 14
cbda 15
cdab 16
cdba 17
…現在有不多於10個兩兩不同的小寫字母,給出它們組成的串,你能求出該串在所有排列中的序號嗎?
【輸入格式】
一行,乙個串。
【輸出格式】
一行,乙個整數,表示該串在其字母所有排列生成的串中的序號。注意:最小的序號是0。
例如:輸入:
bdca
程式應該輸出:
11再例如:
輸入:cedab
程式應該輸出:
70資源約定:
峰值記憶體消耗 < 256m
cpu消耗 < 1000ms
以abcd四個字母為例
光看第乙個 顯然是6個一組
a*** b*** c*** d***
看第二個 發現是2個一組
即abxx acxx adxx
顯然就是以 n! 為組的單位
不過要把a除去
這樣就可以得到演算法
每次算出當前字元在剩下字元集合裡面的排名,然後乘上n!, 並且把這個在集合裡面刪除
注意這個集合是有序的,而stl set可以實現
##code
#include using namespace std;
int main()
vectorx;
x.push_back(1);
for (int i = 1; i <= s.size(); i++)
int ans = 0;
for (int i = 0; i < s.size(); i++)
cnt++;
} //cout << cnt << endl;
//cout << x[s.size() - i - 1] << endl;
ans += cnt * x[s.size() - i - 1];
} cout << ans << endl;
}
##offical test data
abcdefg
abdefgc
gabdefc
abdefgchij
iabdefgchj
0
334329
5904
2903910
藍橋杯模擬 排列序數
x星系的某次考古活動發現了史前智慧型痕跡。這是一些用來計數的符號,經過分析它的計數規律如下 為了表示方便,我們把這些奇怪的符號用a q代替 abcdefghijklmnopq 表示0 abcdefghijklmnoqp 表示1 abcdefghijklmnpoq 表示2 abcdefghijklmn...
藍橋杯 ADV 188 排列數
演算法提高 排列數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 0 1 2三個數字的全排列有六種,按照字母序排列如下 012 021 102 120 201 210 輸入乙個數n 求0 9十個數的全排列中的第n個 第1個為0123456789 輸入格式 一行,包含乙個整數n 輸出格式 ...
藍橋杯模擬題 排列序數
x星系的某次考古活動發現了史前智慧型痕跡。這是一些用來計數的符號,經過分析它的計數規律如下 為了表示方便,我們把這些奇怪的符號用a q代替 abcdefghijklmnopq 表示0 abcdefghijklmnoqp 表示1 abcdefghijklmnpoq 表示2 abcdefghijklmn...