首页 > 代码库 > 密码问题 POJ 2818
密码问题 POJ 2818
POJ上有一个密码问题,感觉这道题还行
10 4 5 3 7 2 8 1 6 10 9 1 Hello Bob 1995 CERC 0 0
BolHeol b C RCE
题目结果在这儿其实是和我们输入的数组有关的,和我们输入的字符串是没有关系的,如果我们直接做的话,不用说,会超时的,超时在于一些没有必要的循环。因为每一个数组在循环一定次数之后,就会一直循环当前的过程,所以我们要优化的就是每一个数组元素循环的周期。
#include<cstdio>
#include<cstring> #include<iostream> using namespace std; int main() { int n,i,k,x[210],j,l,m; char str1[210],str2[210]; while(cin>>n&&n!=0) { int y[210]={0}; //用于存储每一个数组元素要循环的的、周期 for(i=0;i<n;i++) cin>>x[i]; for(i=0;i<n;i++) { j=x[i]-1; while(true) { if(x[j]!=x[i]) { j=x[j]-1; y[i]++; } else { y[i]++; break; } } } while(scanf("%d",&k)!=EOF&&k!=0) { getchar(); gets(str1); for(i=strlen(str1);i<n;i++) str1[i]=‘ ‘; for(i=0;i<n;i++) { m=i; for(j=0;j<k%y[i];j++) //此时,循环k的余数次就可以得出答案了 m=x[m]-1; str2[m]=str1[i]; } str2[n]=‘\0‘; puts(str2); } cout<<endl; } }
密码问题 POJ 2818
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。