日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tavan

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tavan 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Tavan–簡單的k進制題

呵呵真的簡單 也就是考試沒做出來罷了,不慌不慌,奶我一口,還能活
題目摘要
題目描述
小 Zeljko 一直在閣樓里讀他奶奶的舊信,并且發現了一個長度為 N 的單詞。 不幸的是,由于溢出的墨水,他不知道單詞的內容。他把看不清的 M 個字母每 個字母都用一個字符’#‘替換后,在一張紙上重寫了這個詞。他把那張紙遞給 了他的奶奶,對于每個看不清的字母,奶奶給了他 K 個不同的可能。在那之后, Zeljko 在筆記本中寫下了所有可能的單詞,并決定仔細查看他們的屬性,以確 定原始單詞是什么。在看到筆記本上寫下的單詞后,他的奶奶意識到他們正在 尋找的是按字典序排列的第 X 個單詞。Zeljko 在他們學校學習字母表的那天生 病了,所以他要求你幫助他確定原來的單詞。 輸入 第一行輸入包含整數 N,M,K 和 X(1≤N≤500,1≤M≤N,1≤K≤26,1≤X≤ 1e9)。分別表示單詞的長度,看不清的字母的數量,奶奶給出的字母的數量和 原單詞是字典序的第幾個。 第二行輸入包含一個長度為 N 的字符串,由小寫英文字母和字符’#‘組成。 表示 Zeljko 找到的單詞,其中字符’#'表示看不清的字母。 接下來 M 行中的每一行包含一個長度為 K 的字符串,由 K 個不同的小寫英文 字母組成。第 2+i 行的 K 個字母表示第 i 個看不清的 保證 X 總是小于等于能構造出的單詞的總數。

輸入格式
第一行輸入包含整數 N,M,K 和 X(1≤N≤500,1≤M≤N,1≤K≤26,1≤X≤ 1e9)。分別表示單詞的長度,看不清的字母的數量,奶奶給出的字母的數量和 原單詞是字典序的第幾個。 第二行輸入包含一個長度為 N 的字符串,由小寫英文字母和字符’#‘組成。 表示 Zeljko 找到的單詞,其中字符’#'表示看不清的字母。 接下來 M 行中的每一行包含一個長度為 K 的字符串,由 K 個不同的小寫英文 字母組成。第 2+i 行的 K 個字母表示第 i 個看不清的字母的 K 種可能。 保證 X 總是小于等于能構造出的單詞的總數。

輸出格式
輸出一個字符串。表示原本的單詞。

樣例
樣例輸入
9 2 3 7
po#olje#i
sol
znu
樣例輸出
posoljeni
數據范圍與提示
對于 30%的數據,M=1 并且 K=3。 對于另外 30%的數據,M=1。
數據很簡單本寶寶就不再解釋了

想法+題解

此題要解決的就是‘#’所以有臉的字母就已經失寵了不夠吸引朕
初拿此題腦子里一定要有暴力的美麗身姿:而X的范圍可以讓你炸爽
可以暴力枚舉每一種情況放進一個數組里再來個sort鳳舞(我考試就是這樣的)
80%的分就到手了(嘿嘿嘿)

那么怎么拿呢?
brainstorm一波:
如果我們將看不清的每一個字母的k種可能按字典序從小到大排序傻子都看得出
整個串字典序最小的就是每一個字母的第一種可能
下一個字典序就讓最后一個字母移向下一個
若已經自己到達了第k種就讓前一個字母移動一個自己又再次回到第一個(如此循環往復…)
這個時候這道題的真面目就漸漸顯露了:
自己滿k前一位就進1,完全就是k進制法則嘛
那么題目就可以變為有m個進制位,x的k進制轉換,而第i個字母就取第i個進制位上的數

實在碼力有限的可以瞅瞅【代碼實現】
部分很奇的技巧處理學我 可以換一種方法搞

#include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; #define MAXN 505 vector < char > G[MAXN]; string s; int n, m, k, x, cnt; int flag[MAXN], choose[MAXN]; int main() {scanf ( "%d %d %d %d", &n, &m, &k, &x );x --;cin >> s;for ( int i = 0;i < s.length();i ++ )if ( s[i] == '#' )flag[++ cnt] = 1;for ( int i = 1;i <= m;i ++ ) {scanf ( "\n" );//以前被getchar啃過寶寶有心理陰影for ( int j = 1;j <= k;j ++ ) {char c;scanf ( "%c", &c );G[i].push_back ( c );}}for ( int i = 1;i <= m;i ++ )sort ( G[i].begin(), G[i].end() );cnt = 0;while ( x != 0 ) {choose[++ cnt] = x % k;x /= k;}cnt = 1;for ( int i = 0;i < s.length();i ++ ) {if ( s[i] == '#' ) {printf ( "%c", G[cnt][choose[m - cnt + 1]] );cnt ++;}elseprintf ( "%c", s[i] );}return 0; }

又A一道,我們下期再見!!!

總結

以上是生活随笔為你收集整理的Tavan的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。