藍橋杯 2014 4 排列序數

2021-07-26 12:09:47 字數 1495 閱讀 1770

如果用a b c d這4個字母組成乙個串,有4!=24種,如果把它們排個序,每個串都對應乙個序號:

abcd 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

##algorithm

以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...