⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1026cipher.cpp

📁 算法编程题,北京大学OnlineJudge 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 + -