題目描述
所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。
現在,我們對問題做兩個限制:
首先,我們只考慮加法的蟲食算。這裡的加法是n進製加法,算式中三個數都有n位,允許有前導的0。
其次,蟲子把所有的數都啃光了,我們只知道哪些數字是相同的,我們將相同的數字用相同的字母表示,不同的數字用不同的字母表示。如果這個算式是n進製的,我們就取英文本母表午的前n個大寫字母來表示這個算式中的0到n-1這n個不同的數字:但是這n個字母並不一定順序地代表0到n-1)。輸入資料保證n個字母分別至少出現一次。
上面的算式是乙個4進製的算式。很顯然,我們只要讓abcd分別代表0123,便可以讓這個式子成立了。你的任務是,對於給定的n進製加法算式,求出n個不同的字母分別代表的數字,使得該加法算式成立。輸入資料保證有且僅有一組解
輸入輸出格式
輸入格式:
包含四行。第一行有乙個正整數n(n<=26),後面的3行每行有乙個由大寫字母組成的字串,分別代表兩個加數以及和。這3個字串左右兩端都沒有空格,從高位到低位,並且恰好有n位。
輸出格式:
包含一行。在這一行中,應當包含唯一的那組解。解是這樣表示的:輸出n個數字,分別表示a,b,c……所代表的數字,相鄰的兩個數字用乙個空格隔開,不能有多餘的空格。
輸入輸出樣例
輸入樣例#1:
5abced
bdace
ebbaa
輸出樣例#1:
1 0 3 4 2
————————————————
思路:讀入資料
開始搜尋
第 ii 層搜尋第 ii 個字母的值(即 char(i+『a』-1))的值,採用乙個jud函式判斷合法性
當搜尋完所有字母並且全部合法後,直接輸出,退出程式
#include
#include
#include
#include
#include
#include
using
namespace std;
char a[30]
,b[30
],c[30]
;int t[
300]
,used[30]
,p[30
],u[30]
,y;int n;
boolok(
)}return1;
}void
try_1()
cout<'a']
;for
(int i=
'a'+
1;i<=
'a'+n-
1;i++
)cout<<
' '<;exit(0
);}void
dfs(
int now)
for(
int i=n-
1;i>=
0;i--)}
t[p[now]
+'a'-1
]=-1
;}intmain()
dfs(1)
;return0;
}
普及練習場 深度優先搜尋 P1605 迷宮
題目描述 給定乙個n m 1 n,m 5 方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入輸出格式 輸入格式 第一行n m和t,n為行...
普及練習場 深度優先搜尋 P1019 單詞接龍
題目描述 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部...
普及練習場 廣度優先搜尋 P1141 01迷宮
題目描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入輸出格式 輸入格式 輸入的第1行為兩個正整數n,m。...