poj1026
来源:互联网 发布:买房子哪个网好 知乎 编辑:程序博客网 时间:2024/05/01 02:07
题目大意: 给定n并且给出n个数字a1,a2,a3.....an,按照顺序第一位的数字放到第a1
的位置上,如此排列n位之后,算是置换一次。
给定m,则要求后面的字符串按照这个规则置换次,得出置换m次后的
字符串,并且最后输出一个换行符。
思路:刚开始总是runtime error 之后发现是最后输出的0 的情况么有搞清楚,导致
总是运行出错。这道题,最重要的用到了一个循环节的知识,一开始我记录的
字符串的循环节,按照顺序记录一个循环,之后发现这样可能存不下,而且很
可能超时。之后别人推荐可以将每个字符的循环节存储起来,以便于后续的运
用。相比之下,这样要快捷方便许多。
代码如下:
#include<stdio.h>#include<iostream>#include<string.h>using namespace std;int a[250],n,b[250];char data[250],index[250];int get(int i,int sign) //得到循环节以及查找 { int temp=a[i],l=1; if(sign==-1) { while(temp!=i) { temp=a[temp]; l++; } return l; } else { while(l!=sign) { temp=a[temp]; l++; } return temp; }}int main(){ int i,k,temp,len; while(scanf("%d",&n)!=EOF&&n) { for(i=0;i<n;i++) { scanf("%d",&a[i]); a[i]--; } for(i=0;i<n;i++) //存储循环节 b[i]=get(i,-1); while(scanf("%d",&k)!=EOF&&k) { getchar(); gets(data); len=strlen(data); memset(index,32,sizeof(index)); for(i=0;i<n;i++) { if(len<=i) data[i]=' '; //注意给字符串补全空格否则出现结果丢失 if(k%b[i]==0) temp=i; else temp=get(i,k%b[i]); index[temp]=data[i]; } index[n]=0; puts(index); } cout<< endl; //格式 } return 0;}
0 0
- POJ1026
- poj1026
- poj1026
- poj1026
- poj1026
- poj1026
- poj1026
- poj1026
- poj1026
- poj1026--Cipher
- POJ1026 Cipher
- poj1026 模拟
- POJ1026 HDU1439 Cipher
- POJ1026,Cipher,数学题
- poj1026解题报告
- POJ1026 Cipher 【polya】
- poj1026 Cipher 置换群
- 置换群 POJ1026
- getParamer和getAttribute
- Codeforces Round #288 (Div. 2) A. Pasha and Pixels
- android TextView
- oracle RAC DRM原理解析
- UVA - 11809 Floating-Point Numbers
- poj1026
- slf4j
- Tomcat 多端口,多虚拟主机配置方法
- iOS 混色.....两个颜色过渡,颜色混色算法
- 无废话WCF入门教程一[什么是WCF]
- 关于Local socket
- eclipse的简单设置
- SQL语句优化解析
- Java内存泄露监控检测工具-- JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat