演算法提高 判斷名次

2022-07-31 08:27:12 字數 1003 閱讀 9505

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

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

大寫字母a~e,關係運算<、<=、=、>=、>、!=,數字1~5。注意:等於是「=」不是「==」!可能有多解,請按照字典序輸出排名序列,每個解一行

最後一行輸出解的數量

樣例輸入

a=2d=5

e>3

a>2

b!=1acdeb

aecbd

badce

bcade

bdace

ceadb

cebda答案要求按字典序輸出,如果用全排列函式來做,那麼可以省去排序的過程。所有的排列只有5!種,因此時間可控。

1.檢測每一種可能的排序

2.如果奇數名次的人說了真話,那麼此排列不可取

3.如果偶數名次的人說了假話,那麼此排列不可取

#include #include #include #include #include #include 

using

namespace std;

string words[5];

string ord = "abcde";

int sum = 0;

bool isright()

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

else

} sum++;

return

true;

}int main()

do while (next_permutation(ord.begin(), ord.end()));

cout << sum;

return 0;

}

參考分析

演算法提高 判斷名次

演算法提高 判斷名次 時間限制 1.0s 記憶體限制 256.0mb 問題描述 某場比賽過後,你想要知道a e五個人的排名是什麼,於是要求他們每個人說了一句話。經典的開頭 得了第1名的人23,說了假話 得了第5名的人不好意思,也說了假話 為了使求解問題簡單,第3名同樣說了假話。奇數名次說假話 輸入格...

演算法提高 判斷名次

問題描述 某場比賽過後,你想要知道a e五個人的排名是什麼,於是要求他們每個人說了一句話。經典的開頭 得了第1名的人23,說了假話 得了第5名的人不好意思,也說了假話 為了使求解問題簡單,第3名同樣說了假話。奇數名次說假話 輸入格式 共5行,各行依次表示a e說的話。每行包含乙個形如 a 3 的名次...

演算法提高 判斷名次

問題描述 某場比賽過後,你想要知道a e五個人的排名是什麼,於是要求他們每個人說了一句話。經典的開頭 得了第1名的人23,說了假話 得了第5名的人不好意思,也說了假話 為了使求解問題簡單,第3名同樣說了假話。奇數名次說假話 輸入格式 共5行,各行依次表示a e說的話。每行包含乙個形如 a 3 的名次...