洛谷 P1013 進製位 搜尋 進製運算

2021-08-09 22:44:46 字數 1857 閱讀 3275

著名科學家盧斯為了檢查學生對進製的理解,他給出了如下的一張加法表,表中的字母代表數字。 例如:

+    

l k v e

l l k v e

k k v e kl

v v e kl kk

e e kl kk kv

其含義為:

l+l=l,l+k=k,l+v=v,l+e=e

k+l=k,k+k=v,k+v=e,k+e=kl

…… e+e=kv

根據這些規則可推導出:l=0,k=1,v=2,e=3

同時可以確定該錶表示的是4進製加法

//感謝lxylxy123456同學為本題新加一組資料

輸入格式:

n(n≤9)表示行數。

以下n行,每行包括n個字串,每個字串間用空格隔開。(字串僅有乙個為『+』號,其它都由大寫字母組成)

輸出格式:

① 各個字母表示什麼數,格式如:l=0,k=1,……按給出的字母順序。

② 加法運算是幾進製的。

③ 若不可能組成加法表,則應輸出「error!」

輸入樣例#1:

複製

5

+ l k v e

l l k v e

k k v e kl

v v e kl kk

e e kl kk kv

輸出樣例#1:

複製

l=0 k=1 v=2 e=3

4

這道題作為洛谷第一頁的題,好久放在這裡都嘗試過【**能力極差= =】

好吧仔細想想還是很簡單的【都沒怎麼剪枝就 0ms】

作為乙個加法表,理應包含該進製下所有的數字【不然相加的結果會冒出別的字母出來】

這樣我們可以知道這是在n進製下的加法【這裡n指字母個數】

既然一定有乙個0,我們就可以直接找出那一行都是原數的就是0

其它的就dfs嘗試給它賦予乙個數字,通過該行的加法錶用已知的檢查是否合法

搜到n + 1就算出來啦

#include#include#include#include#include#include#define rep(i,n) for (int i = 1; i <= (n); i++)

using namespace std;

const int maxn = 13,maxm = 105,inf = 1000000000;

mapid;

int n,siz = 0,num[maxn];

bool used[maxn];

char names[maxn];

inline char rc()

inline int code(char c)

return id[c];

}struct num

bool iscal()

int getn()

void getr()

}}sum[maxn][maxn];

void init()

bool flag = true;

rep(i,n)

if (flag)

} if (!flag)

if (num[u] != -1) dfs(u + 1);

else

} }}int main()

{ init();

dfs(1);

cout<<"error!"<

洛谷 P1013 進製位

題目描述 著名科學家盧斯為了檢查學生對進製的理解,他給出了如下的一張加法表,表中的字母代表數字。例如 l k v e l l k v e k k v e kl v v e kl kk e e kl kk kv 其含義為 l l l,l k k,l v v,l e e k l k,k k v,k v ...

洛谷NOIP刷題 P1013 進製位

題目描述 著名科學家盧斯為了檢查學生對進製的理解,他給出了如下的一張加法表,表中的字母代表數字。例如 l l ll l l,l k kl k k,l v vl v v,l e el e e k l kk l k,k k vk k v,k v ek v e,k e klk e kl e e kve e...

洛谷P1013 進製位 數論

洛谷p1013 進製位 數論 首先我們可以發現乙個有趣的性質,就是1一定要有,因為有進製就一定會有一嘛,額,其實我也不會證,題解上說一定是連續的幾個數,且一定會包含一 根據這個條件,我們可以發現如果只算那些只由乙個字母構成的,我們可以發現,乙個字母如果 出現n次,那麼其表示的數就是 n 1 那麼如何...