zoj 1009
2日で木が問題を作ったことがあります...実験の授業の時、木は用事があって、問題をしました.穴のお父さんは最后に意外にもネットに乗れません...幸いにも寮に帰ってすぐに渡した.の
/*
zoj_1009
。。 。。
:
, x x' , x'=x+dx;
dx :
int rotor[m]; m 。
BADFEC, {1, -1, 1, 2, 0, 3},
rotor , , {3, 1, -1, 1, 2, 0};
, , , change()
*/
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string s[3];
int rotor[3][60];
string model="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int co1,co2,co3;
void change( int n )
{
int i,j,t,temp[3][60];
for( i=0;i<3;i++ )
{
for( j=0;j<n;j++ )
{
t=j+rotor[i][j];
temp[i][t]=-rotor[i][j];
temp[i][t]=( temp[i][t]+n )%n ;
}
}
for( i=0;i<3;i++ )
{
for( j=0;j<n;j++ )
rotor[i][j+n]=rotor[i][j]=temp[i][j];
}
}
void output( char c,int n )
{
int i,t,sta[3];
sta[2]=n-co3;
sta[1]=n-co2;
sta[0]=n-co1;
/* for( i=2;i>=0;i-- )
cout<<sta[i];
cout<<endl;*/
for( i=2;i>=0;i-- )
{
t=rotor[i][ sta[i]+c-'A' ];
c='A'+( c-'A'+t )%n;
}
co1++;
if( co1==n )
{
co2++;
co1=0;
if( co2==n )
{
co3++;
co2=0;
if( co3==n )
co3=0;
}
}
cout<<char( c-('A'-'a') );
}
int main()
{
int n,m,i,j,first,count;
string temp;
first=1;
while( cin>>n && n )
{
for( i=0;i<3;i++ )
{
cin>>s[i];
for( j=0;j<n;j++ )
rotor[i][j]=s[i][j]-model[j];
}
change( n );
/*for( i=0;i<3;i++ )
{
for( j=0;j<n;j++ )
cout<<rotor[i][j]<<" ";
cout<<endl;
}*/
cin>>m;
if( first!=1 ) cout<<endl;
cout<<"Enigma "<<first<<":
";
while( m-- )
{
cin>>temp;
co1=co2=co3=0;
for( i=0;i<temp.size();i++ )
{
output( temp[i],n );
}
cout<<endl;
}
first++;
}
return 0;
}