著名科學家盧斯為了檢查學生對進製的理解,他給出了如下的一張加法表,表中的字母代表數字。 例如:
+
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=34
這道題作為洛谷第一頁的題,好久放在這裡都嘗試過【**能力極差= =】
好吧仔細想想還是很簡單的【都沒怎麼剪枝就 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 那麼如何...