UVA 12596 Recursive Texting 預先處理+dfs

來源:互聯網
上載者:User

標籤:blog   http   io   ar   os   sp   for   on   2014   

題目連結:點擊開啟連結

題意:

給定一個字串,

操作一次:

1、先把字串按照上面的圖變成數字。

2、再把數字按照上面的圖變成字母。

輸出操作n次後第k位的字母。

先預先處理每個一個字母操作i次後產生的長度,然後遞迴搜尋答案。


#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <iostream>using namespace std;typedef long long ll;#define int llchar str[11][11] = {"ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"};ll cnt[2][30], t[30][30];char a[1005];int idx(char c){if('A'<=c && c<='C')return 2;if('D'<=c && c<='F')return 3;if('G'<=c && c<='I')return 4;if('J'<=c && c<='L')return 5;if('M'<=c && c<='O')return 6;if('P'<=c && c<='S')return 7;if('T'<=c && c<='V')return 8;return 9;}void ADD(ll *p, char ch, ll num) {if(ch == 'A' || ch == 'B' || ch == 'C') {p['T'-'A']+=num; p['W'-'A']+=num; p['O'-'A']+=num;}else if(ch == 'D' || ch == 'E' || ch == 'F') {p['T'-'A']+=num; p['H'-'A']+=num; p['R'-'A']+=num; p['E'-'A']+=num*2;}else if(ch == 'G' || ch == 'H' || ch == 'I') {p['F'-'A']+=num; p['O'-'A']+=num; p['U'-'A']+=num; p['R'-'A']+=num;}else if(ch == 'J' || ch == 'K' || ch == 'L') {p['F'-'A']+=num; p['I'-'A']+=num; p['E'-'A']+=num; p['V'-'A'] += num;}else if(ch == 'M' || ch == 'N' || ch == 'O') {p['S'-'A']+=num; p['I'-'A']+=num; p['X'-'A']+=num;}else if(ch == 'P' || ch == 'Q' || ch == 'R' || ch == 'S') {p['S'-'A']+=num; p['E'-'A']+=num*2; p['V'-'A']+=num; p['N'-'A']+=num;}else if(ch == 'T' || ch == 'U' || ch == 'V' ) {p['E'-'A']+=num; p['I'-'A']+=num; p['G'-'A']+=num; p['H'-'A']+=num; p['T'-'A']+=num;}else if(ch == 'X' || ch == 'Y' || ch == 'Z'|| ch == 'W') {p['N'-'A']+=num*2; p['I'-'A']+=num; p['E'-'A']+=num;}}void pre() {for(int i = 0; i < 26; i ++) {t[i][0] = 1;int ne = 0, old = 1;memset(cnt, 0, sizeof cnt);cnt[ne][ i ] = 1;for(int j = 1; j <= 20; j ++) {//ll sum = 0;swap(ne, old);memset(cnt[ne], 0, sizeof cnt[ne]);for(int tt = 0; tt < 26; tt ++) {ADD(cnt[ne], tt+'A', cnt[old][tt]);}for(int tt = 0; tt < 26; tt++)sum+=cnt[ne][tt];t[i][j] = sum;}}}char dfs(int deep, ll k){if(deep == 0)return a[k-1];int len = strlen(a);for(int i = 0; i < len; i++)if(t[a[i]-'A'][deep] >= k){char cc = a[i]; a[0] = 0;strcpy(a, str[idx(cc)]);//cout<<a;            return dfs(deep-1, k);}else k -= t[a[i]-'A'][deep];}#undef intint main() {#define int llpre();int T, n, Cas = 1; ll k;cin>>T; getchar();while(T-- > 0) {scanf("%s", a);cin>>n>>k;cout<<"Case "<<Cas++<<": ";printf("%c\n", dfs(n, k));}return 0;}


UVA 12596 Recursive Texting 預先處理+dfs

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.