藍橋杯 ADV 141 演算法提高 判斷名次

2021-09-01 09:18:03 字數 1257 閱讀 2499

問題描述

某場比賽過後,你想要知道a~e五個人的排名是什麼,於是要求他們每個人說了一句話。(經典的開頭……-_-!)得了第1名的人23,說了假話;得了第5名的人不好意思,也說了假話;為了使求解問題簡單,第3名同樣說了假話。(奇數名次說假話)

輸入格式

共5行,各行依次表示a~e說的話。

每行包含乙個形如「a>=3」的名次判斷,即乙個大寫字母+關係運算子+乙個數字,不包含空格。

大寫字母a~e,關係運算<、<=、=、>=、>、!=,數字1~5。注意:等於是「=」不是「==」!

輸出格式

可能有多解,請按照字典序輸出排名序列,每個解一行

最後一行輸出解的數量

樣例輸入

a=2

d=5e>3

a>2

b!=1

樣例輸出

acdeb

aecbd

badce

bcade

bdace

ceadb

cebda

7

分析:1.用全排列公式,列舉除所有可能的排序,檢查每個排序是否符合要求

2.檢查每種名次,如果出現了奇數名次的人說了真話,該序列不符合,如果偶數名次的人說了假話,也不符合~

#include #include #include #include #include using namespace std;

string ranks = "abcde";

vectorsay(5);

int cnt;

bool check(string s) ;

for (int i = 0; i < 5; i++)

hash[s[i]] = i + 1;

for (int i = 0; i < 5; i++) else

}cnt++;

return true;

}int main() while (next_permutation(ranks.begin(), ranks.end()));

cout << cnt;

return 0;

}

藍橋杯 ADV 131演算法提高 選擇排序

問題描述 排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 i k 為這個新順序。選擇排序的思想極其簡單,每一步都把乙個最小元素放到前面,如果有多個相等的最小元素,選擇排位較考前的放到當前頭部。還...

藍橋杯 ADV 20 演算法提高 交換Easy

問題描述 給定n個整數組成的序列,每次交換當前第x個與第y個整數,要求輸出最終的序列。輸入格式 第一行為序列的大小n 1 n 1000 和操作個數m 1 m 1000 第二行包含n個數字,表示初始序列。接下來m行,每行兩個整數x,y 1 x,y n 表示要交換的兩個整數。在一次交換中,如果x和y相等...

藍橋杯 ADV 208 演算法提高 矩陣相乘

問題描述 小明最近在為線性代數而頭疼,線性代數確實很抽象 也很無聊 可惜他的老師正在講這矩陣乘法這一段內容。當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。小明希望你來幫他完成這個任務。現在給你乙個ai行aj列的矩陣和乙個bi行bj列的矩陣,要你求出他們相乘的積 當然也是矩陣 輸入資料保...