清北第二套

一个字符 它可以用作字符 也可以自动就用作它的编码

关于明文和密文的对应细节:(老想起密码子和反密码子……想广红女神)

  • 密文明文不能对应多个
  • 一共26个字母 如果用了25个 剩下一个自动对应
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
char a[10000],b[10000],c[10000],u[1000];
int fa[100000],fb[10000],sa,sb;
char ans[100000];
int l,lc,p=0,m[10000];
void pr() {
	for(int i=0;i<=l-1;i++) {
		if(fa[a[i]]==0)sa++;
		fa[a[i]]=1;
		if(fb[b[i]]==0)sb++;
		fb[b[i]]=1;
	}
}
void work1() {
	char pa,pb;
	for(char i='a';i<='z';i++) {
		if(fa[i]==0) pa=i;
		if(fb[i]==0) pb=i;
	}
	m[pb]=pa;
}
int main() {
	freopen("enc.in","r",stdin);
    freopen("enc.out","w",stdout);
	cin>>a;
	cin>>b;l=strlen(b);
	cin>>c;lc=strlen(c);
	pr();
	if(sa!=sb) {
		cout<<"ERROR";
		return 0;
	}
	for(int i=0;i<=l-1;i++) {
		if(m[b[i]]!=0&&m[b[i]]!=a[i]) { 
	      cout<<"ERROR";
	      return 0;
		} 
		else
		  m[b[i]]=a[i];
	}
	if(sb==25) work1(); 
	for(int i=0;i<=lc-1;i++) 
		if(m[c[i]]==0) {
			cout<<"ERROR";
			return 0;
		}
	for(int i=0;i<=lc-1;i++) cout<<(char)m[c[i]];
	fclose(stdin);
	fclose(stdout); 
	return 0;
} 

稍加分析 发现最长上升子序列

https://www.cnblogs.com/wxjor/p/5524447.html

找三元环

深搜一下~

https://www.cnblogs.com/Currier/p/6369209.html

猜你喜欢

转载自blog.csdn.net/syh8501/article/details/89883717