NOIP提高組1998進製位題解

2022-05-21 20:54:14 字數 2375 閱讀 4439

若不會有錯,則進製=n,且數值都是連續的

因為:1必須有(不然十位搞鬼)

然後就:

1 1 2 2必須有,其它數字以此類推

一看到題,有點蒙,大致思考了以後,我想起了以前做過的noip2023年的蟲食算鬼畜豎式題。

於是,我構起了這道題的大致框架:將矩陣分解成乙個個豎式(在程式中有size個豎式),並對每個字母所對應的數進行列舉,最後寫出答案。

在做程式中,需要思考以下幾個問題:

最開始我以為進製是在m(不重複字母個數),和n-1(第一行的字母總數)之間,後來發現兩者的值一直相同,這個問題就引刃而解了。想多了

太簡單了!(fjj說的),這個就是本程式搜尋的主體,本蒟蒻認為只要是學過dfs的人都會——定義乙個遞迴函式,函式有乙個參量,就是矩陣(輸入的那個)的第一行的每一列(從2到n),指的是每個字母,在遞迴函式中放乙個迴圈,從0迴圈到top-1(注意是從0開始,不是1,top指的是top進製),列舉每個字母所代表的數——解決了!

在這裡我還用了stl裡面的map,用在這裡是將乙個字串作為下標來儲存布林值或整形

將整個矩陣掃一遍,用乙個陣列存現在所在的那一列的第乙個字母(加數一),用另乙個字母儲存所在的那一行的第乙個字母(加數二),用第三個陣列儲存那一行那一列的字母(可能是字串),這個問題也就解決了。

首先,我們要加剛才準備好的豎式按列舉出來的答案一一轉換為數字:

先推薦一種資料結構轉換成數字的**然後就是就是轉換了,我的思路是用乙個空陣列計算得到的兩個加數的和(這裡用到了高精度的思想),在和原來的和進行對比,一樣則通過,不一樣則表示列舉有問題(要對每乙個豎式進行檢驗)而這兩個函式的入口應該放在深搜函式的開始處,並且需要特判是否列舉完每個字母

不想講了,它叫我們怎麼輸出就怎麼輸出

時間複雜度:o(1)(進製列舉)*o(n)(字母列舉)*o(n)(每個字母所對應的數字的列舉)*o(n)(每個掃瞄豎式)*o(n)(每個豎式的確認)=o(n^4)——不會超時(n<=9)——不需要剪枝了(我其實是懶得剪)。

有一點要注意:每個豎式轉換成數字時數字豎式陣列要時時清空,要不然就會出現wa的情況。

NOIP 1998 提高組 複賽 車站

noip 1998 提高組 複賽 車站 1.題意很快看懂,但第二站上車人數怎麼求?2.突然想到,第二站上車人數可以採用列舉的方法求出,這一點跟筆算有很大不同。3.輸出時,考慮了幾個問題,x 1,x 2,x n都需單獨列出。4.3 x n 1根據列舉進行計算。5.編好 樣例通過,提交ac。6.本題收穫...

P1011 NOIP1998 提高組 車站

不妨設第 2 站上車和下車的乘客數量均為 y 站編號上車人數 下車人數 開出時車上人數 1 a 0 a 2 y y a 3 a y y 2a 4 a 2y a y 2a y 5 2a 3y a 2y 3a 2y 6 3a 5y 2a 3y 4a 4y 7 5a 8y 3a 5y 6a 7y 但 y ...

Noip1998 提高組3 盧斯加法表

著名科學家盧斯為了檢查學生對進製的理解,他給出了如下的一張加法表,表中的字母代表數字。例如 其含義為 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 無關,就這個意思 同時可以確定該...