POJ 2015 Permutation Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
	int i,j,k,n,d,x,l,a;
	char s[35],p[35],m[65],c[65];
	while(scanf("%d",&x)!=EOF && x)
	{
		getchar();
		gets(s);
		gets(p);
		gets(c);
		l=strlen(s);
		n=strlen(c);
		d=((int)pow(n*1.0,1.5)+x)%n;
		memset(m,0,sizeof(m));
		for(i=0;i<l;i++) if(c[d]==s[i]) break;
		m[d]=p[i];
		for(i=d-1;(i+n)%n!=d;i--)
		{
			if(i<0) i=(i+n)%n;
			for(j=0;j<l;j++) if(c[i]==s[j]) break;
			for(k=0;k<l;k++) if(m[(i+1)%n]==s[k]) break;
			a=j^k;
			m[i]=p[a];
		}
		printf("%s\n",m);
	}
	return 0;
}

原文地址:https://www.cnblogs.com/java20130726/p/3218236.html