?? 1026cipher.cpp
字號:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<vector>
#include<set>
#include<map>
using namespace std;
//矩陣乘法求置換r^n
struct node{
int d[201];
};
int n;
int cnt;
char s[201];
char bf[201];
node a;
bool Input(){
scanf("%d",&n);
if(!n){
return 0;
}
return 1;
}
node Cal(node& a,node& b){
node r;
int i;
for(i=0;i<n;i++){
r.d[i]=a.d[b.d[i]];
}
return r;
}
node Go(int n){
if(n==1){
return a;
}else{
node r=Go(n/2);
r=Cal(r,r);
if(n&1){
r=Cal(r,a);
}
return r;
}
}
void Proc(){
int i,j,k;
node ans=Go(cnt);
int len=strlen(s);
for(i=len;i<n;i++){
s[i]=' ';
}
s[n]='\0';
memcpy(bf,s,sizeof(s));
for(i=0;i<n;i++){
s[ans.d[i]]=bf[i];
}
return;
}
void Solve(){
int i,j,len;
for(i=0;i<n;i++){
scanf("%d",&a.d[i]);
a.d[i]--;
}
gets(bf);
while(1){
gets(bf);
sscanf(bf,"%d",&cnt);
if(!cnt){
break;
}
len=strlen(bf);
for(i=0;bf[i]!=' ';i++);
for(j=0,i++;i<len;i++,j++){
s[j]=bf[i];
}
s[j]=0;
Proc();
printf("%s\n",s);
}
printf("\n");
return;
}
int main()
{
freopen("in.txt","r",stdin);
while(Input()){
Solve();
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -