zoukankan      html  css  js  c++  java
  • [CKOJ] ROUND 7 Problem B 加密与解密

    问题 B: 加密与解密

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 44  解决: 19
    [提交][状态][讨论版]

    题目描述

    给定字符串a,b并定义如下加密方式

    不断用b对a依照下表按位转换

    当b长度小于a时重复使用b即可

    输入数据

    • 第一行一个整数T表示数据组数
    • 接下来T行每行一个整数o,两个字符串a和b,用空格隔开
    • 当o为1时代表a为原码,o为2时代表a为密码

    输出数据

    • 共T行,每行一个字符串代表加密前/后的字符串
    • 输出全部使用小写字母

    样例输入

    • 3
    • 1 abyn cx
    • 1 zdwisretarded gg
    • 2 ooooooo afk

    样例输出

    • cyak
    • fjcoyxkzgxjkj
    • ojeojeo

    输入

    输出

    提示

    对于40%的数据, 保证所有o为1(只需处理加密)

    对于100%的数据, 保证T<=100, 1<=a,b长度<=1000, 1<=o<=2

    白想了很多 其实暴力穷举打表是最快最直观的选择

    节约时间提升效率

    #include <iostream>
    using namespace std;
    int main()
    {
    	string stl[26]={
    	"abcdefghijklmnopqrstuvwxyz",
    	"bcdefghijklmnopqrstuvwxyza",
    	"cdefghijklmnopqrstuvwxyzab",
    	"defghijklmnopqrstuvwxyzabc",
    	"efghijklmnopqrstuvwxyzabcd",
    	"fghijklmnopqrstuvwxyzabcde",
    	"ghijklmnopqrstuvwxyzabcdef",
    	"hijklmnopqrstuvwxyzabcdefg",
    	"ijklmnopqrstuvwxyzabcdefgh",
    	"jklmnopqrstuvwxyzabcdefghi",
    	"klmnopqrstuvwxyzabcdefghij",
    	"lmnopqrstuvwxyzabcdefghijk",
    	"mnopqrstuvwxyzabcdefghijkl",
    	"nopqrstuvwxyzabcdefghijklm",
    	"opqrstuvwxyzabcdefghijklmn",
    	"pqrstuvwxyzabcdefghijklmno",
    	"qrstuvwxyzabcdefghijklmnop",
    	"rstuvwxyzabcdefghijklmnopq",
    	"stuvwxyzabcdefghijklmnopqr",
    	"tuvwxyzabcdefghijklmnopqrs",
    	"uvwxyzabcdefghijklmnopqrst",
    	"vwxyzabcdefghijklmnopqrstu",
    	"wxyzabcdefghijklmnopqrstuv",
    	"xyzabcdefghijklmnopqrstuvw",
    	"yzabcdefghijklmnopqrstuvwx",
    	"zabcdefghijklmnopqrstuvwxy",
    	};
    	int N;
    	cin>>N;
    	while(N--)
    	{
    		int mode;
    		cin>>mode;
    		string a,b;
    		cin>>a>>b;
    		int lenb=b.length(),flag=0;
    		int x,y;
    		if(mode==1)
    		{
    			for(int i=0;i<a.length();i++)
    			{
    				x=a[i]-'a';
    				y=b[flag]-'a';
    				cout<<stl[x][y];
    				flag++;
    				if(flag==lenb)
    					flag=0;
    			}
    		}
    		else
    		{
    			for(int i=0;i<a.length();i++)
    			{
    				x=b[flag]-'a';
    				for(int j=0;j<26;j++)
    				{
    					if(stl[x][j]==a[i])
    					{
    						char ans=j+'a';
    						cout<<ans;
    						break;
    					}
    				}
    				flag++;
    				if(flag==lenb)
    					flag=0;
    			}
    		}
    		cout<<endl;
    	}
    	return 0;
    } 
  • 相关阅读:
    编译使用luasocket
    使用openssl的一些问题
    c++调用lua注册的带参数的回调
    合服
    windows防火墙命令
    mac os .xip格式解压
    Get GPU Data Method
    Unity编译Mono
    Unity Mono运行机制分析及内存优化
    unity5 AssetBundleBuild用法
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270775.html
Copyright © 2011-2022 走看看