NC208618. 破解密码
描述
输入描述
第一行一个数T,表示有T个加密服务器。
对于每组数据,接下来一行一个数K,表示密钥长度。
接下来行,每行包括一个k进制数表示加密数字(加密数字如包含字符,均为小写字符),或者-1表示加密 数字损坏。接着一个字符串表示加密字符。
输出描述
对于每个服务器输出"Case #x: y",x表示这是第几个服务器,y表示答案,一个表示密钥的字符串,或者-1。
示例1
输入:
<a href="http://nowcoder.oss-cn-hangzhou.aliyuncs.com/files/20200702/sample.in">下载链接</a>
输出:
<a href="http://nowcoder.oss-cn-hangzhou.aliyuncs.com/files/20200702/sample.out">下载链接</a>
C++14(g++5.4) 解法, 执行用时: 303ms, 内存消耗: 412K, 提交时间: 2020-07-03 12:09:40
#include <bits/stdc++.h> using namespace std; #define ll long long ll input(){ ll x=0,f=0;char ch=getchar(); while(ch<'0'||ch>'9') f|=ch=='-',ch=getchar(); while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return f? -x:x; } #define PII pair<ll,ll> #define fr first #define sc second #define mp make_pair #define pb push_back const ll N=2e4; ll k; ll cnt[27],vis[27]; char fnt; vector<PII> v; bool cmp(PII a,PII b){ return a>b; } int main(){ // freopen("11.in","r",stdin); ll T=input(),cas=0; while(T--){ memset(cnt,0,sizeof(cnt)); memset(vis,0,sizeof(vis)); v.clear(); k=input(); char s1[N],s2[N]; for(ll i=1;i<=N;i++){ scanf("%s%s",s1,s2); cnt[s2[0]-'A']++; ll len=strlen(s2); for(ll j=0;j<len;j++) vis[s2[j]-'A']=1; } for(ll i=0;i<26;i++){ if(cnt[i]) v.pb(mp(cnt[i],i)); if(!cnt[i]&&vis[i]) fnt=(char)(i+'A'); } sort(v.begin(),v.end(),cmp); printf("Case #%d: ",++cas); printf("%c",fnt); for(auto t:v){ printf("%c",(char)(t.sc+'A')); } printf("\n"); } }