SDNU 1176.Jam的计数法(思维)
生活随笔
收集整理的這篇文章主要介紹了
SDNU 1176.Jam的计数法(思维)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
Jam不使用阿拉伯數字計數,而是使用小寫英文字母計數。他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文字母按原先的順序,排在前面的字母小于排在它后面的字母。我們把這樣的“數字”稱為Jam數字。在Jam數字中,每個字母互不相同,而且從左到右是嚴格遞增的。每次,Jam還指定使用字母的范圍,例如,從2到10,表示只能使用{b,c,d,e,f,g,h,i,j}這些字母。如果再規定位數為5,那么,緊接在Jam數字“bdfij”之后的數字應該是“bdghi”。(如果我們用U、V依次表示Jam數字“bdfij”與“bdghi”,則U < V,且不存在Jam數字P,使U < P < V)。你的任務是:對于從文件讀入的一個Jam數字,按順序輸出緊接在后面的5個Jam數字,如果后面沒有那么多Jam數字,那么有幾個就輸出幾個。Input
輸入有2行,第1行為3個正整數,用一個空格隔開: s t w (其中s為所使用的最小的字母的序號,t為所使用的最大的字母的序號。w為數字的位數,這3個數滿足:1≤s<T≤26, 2≤w≤t-s ) 第2行為具有w個小寫字母的字符串,為一個符合要求的Jam數字。 所給的數據都是正確的,不必驗證。Output
輸出最多為5行,為緊接在輸入的Jam數字后面的5個Jam數字,如果后面沒有那么多Jam數字,那么有幾個就輸出幾個。每行只輸出一個Jam數字,是由w個小寫字母組成的字符串,不要有多余的空格。Sample Input
5 25 10 efghijkluwSample Output
efghijklux efghijkluy efghijklvw efghijklvx efghijklvySource
NOIP 2006 普及組 #include<bits/stdc++.h> using namespace std;#define ll long long #define eps 1e-9 #define pi acos(-1)const int inf = 0x3f3f3f3f; const int mod = 1000000007; const int maxn = 100 + 8;int s, t, w; char ss[maxn], si[maxn];int main() {std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> s >> t >> w;cin >> ss;si[w - 1] = 96 + t;///用si數組來儲存最終的字符串for(int i = w - 2; i >= 0; i--)si[i] = si[i + 1] - 1;for(int i = 0; i < 5; i++)///五次 {bool flag = 1;int id = w - 1;while(ss[id] == si[id])id--;ss[id]++;for(int i = id + 1; i < w; i++)ss[i] = ss[i - 1] + 1;for(int i = 0; i < w; i++)if(ss[i] != si[i])///判斷該字符串是不是已經達到了最終字符串flag = 0;for(int i = 0; i < w; i++)cout << ss[i];cout << '\n';if(flag)break;///如果已經為最終字符串,就停止 }return 0; }?
轉載于:https://www.cnblogs.com/RootVount/p/11502447.html
總結
以上是生活随笔為你收集整理的SDNU 1176.Jam的计数法(思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gitlab 修改git clone地址
- 下一篇: SDNU 1178.能量项链(区间dp)