首页 > 代码库 > HDU 4300 Clairewd’s message
HDU 4300 Clairewd’s message
字符串模拟。
给你一个26字母的转换表。然后给你一串密文+明文 的字符串,叫你解密,输出完整的密文+明文。
明文可能不完整,直接从字符串一半开始枚举,直到 明文第一个转换后能和 密文第一个相等,然后比下去。
这题被 >> 坑了许久,没注意>> 和 + 的优先级问题。
输出的时候可以建立一个反转表。
#include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<cmath> #define INF 0x7fffffff #define eps 1e-6 #define LL long long using namespace std; char table[26]; char extable[26]; char str[1000001]; int main() { int t,i; scanf("%d",&t); while(t--) { scanf("%s%s",table,str); for(i=0; i<26; i++) extable[table[i]-'a']=i; int len=strlen(str); if(len&1)i=(len>>1)+1; // i=len>>1+1 WA; else i=len>>1; int k=0; for(; i<len; i++) { if(table[str[i]-'a']!=str[k]) continue; else { k++; bool ok=0; for(int j=i+1; j<len; j++) { if(table[str[j]-'a']!=str[k++]) { ok=1; break; } } if(!ok) break; } } for(int j=0; j<i; j++) printf("%c",str[j]); for(int j=0; j<i; j++) printf("%c",extable[str[j]-'a']+'a'); printf("\n"); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。