POJ1026 Cipher 【polya】

This question is not so difficult.

First,my thoughts were we should use a lot of code to find out the loop block,but there is no need to do that .

you just need to get every new position of char in the string.

Algorithm is also easy , just like how do people think such as how you thinking to find a loop

code is below:

#include <cstdio>
#include <cstring>
#include <cstdlib>
int key[99999];
int getIndex(int* key,int i,int k)
{
	int end=i;
	int j;//loop num
	for(j=1;j<=k;j++)
	{
		i=key[i];
		if(i==end)
		{
			for(int kk=0;kk<(k%j);kk++)
			{
				i=key[i];
			}
			return i;
		}
	}
	return i;
}
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		if(!n) break;
		int tmp,k;
		char word[9999];
		char to[9999];
		for(int i=0;i<n;i++)
		{
			scanf("%d",&tmp);
			key[i]=tmp-1;
		}
		while(scanf("%d",&k)&&k!=0)
		{
			getchar();
			gets(word);
			int len=strlen(word);
			for(int i=len;i<n;i++)
				word[i]=' ';
			for(int i=0;i<n;i++)
			{
				to[getIndex(key,i,k)]=word[i];
			}
			for(int i=n-1;;i--)//there cant be i>=0,because maybe the string are all spaces.And,there is no need to do this, because the ques said you can show string of length n,but i dont know why non-length-n is also ok
				if(to[i]!=' ')
				{
					to[i+1]='\0';
					break;
				}
			//to[n]='\0';
			printf("%s\n",to);
		}
		printf("\n");
	}
	return 0;
}

POJ1026 Cipher 【polya】,布布扣,bubuko.com

时间: 2025-01-02 01:57:10

POJ1026 Cipher 【polya】的相关文章

POJ3270 cow sorting 【polya】

题目描述: 给你一个数字序列(每个数字唯一),每次你可以交换任意两个数字,代价为这两个数字的和,问最少用多少代价能把这个序列按升序排列好. 题目的具体做法是参考刘汝佳的<算法艺术与信息学奥赛>大概思路是:以后再用别种方法解, 1.找出初始状态和目标状态.明显,目标状态就是排序后的状态. 2.画出置换群,在里面找循环.例如,数字是8 4 5 3 2 7 明显,                                   目标状态是2 3 4 5 7 8,能写为两个循环:(8 2 7)(4

POJ 2154 【POLYA】【欧拉】

前记: TM终于决定以后干啥了.这几天睡的有点多.困饿交加之间喝了好多水.可能是灌脑了. 切记两件事: 1.安心当单身狗 2.顺心码代码 题意: 给你N种颜色的珠子,串一串长度问N的项链,要求旋转之后重合的算是同一种项链.问一共有多少中可能.结果模p. 1 <= N <= 1000000000, 1 <= P <= 30000 思路: 首先是我们的POLYA定理,给定的公式是这样的sigma(N^gcd(N,i))/N   i从0到N-1. 然后是优化的问题.因为如果我们枚举i累加

POJ 1286 【POLYA】

题意: 给你三种颜色的珠子,每次给你N,问在旋转,翻转之后视作相同的情况下,能组成多少种不同的项链. 思路: 让我们借这道题拯救一下我对POLYA定理的理解... sigma(m^(gcd(i,n))) 以上是在旋转的时候计数的和,其中m是颜色的数量,n是项链的长度. 一下考虑翻转的情况: 当n是偶数的时候, 有n/2种情况循环节的数量是n/2+1,有n/2种情况是n/2. 当n是奇数的时候, 有n种情况是循环节的数量是n/2+1 别忘了最后要除以循环节总的种类数!!! 坑点: 这题n可能等于0

UVa 1339 Ancient Cipher【排序】

/* 中文题目      古老的密码 中文翻译-大意  给你两个字符串,看你能不能将第一个字符变化位置(重排),变成和第二个字符串的26个字母一一对应. 解题思路:将两个字符串的各个字符的数量统计出来,如果各个字符串的数量都是一样的,那么就输出yes,否则输出no 难点详解:在统计每个字符出现的次数有点小难度 关键点:排序 解题人:lingnichong 解题时间:2014/08/26    00:36 解题体会:很好的一题 */ 1339 - Ancient Cipher Time limit

poj1286 Necklace of Beads【裸polya】

很裸的polya,不过我看polya看了很久 吉大ACM模板里面也有 #include <cstdio> #include <cmath> #include <iostream> using namespace std; long long gcd(long long a,long long b) { return b==0?a:gcd(b,a%b); } int main() { #ifndef ONLINE_JUDGE //freopen("G:/1.tx

P4980 【模板】Polya定理

P4980 [模板]Polya定理 题目描述 给定一个\(n\)个点,\(n\)条边的环,有\(n\)种颜色,给每个顶点染色,问有多少种本质不同的染色方案,答案对\(10^9+7\)取模 注意本题的本质不同,定义为:只需要不能通过旋转与别的染色方案相同. 输入输出格式 输入格式: 第一行输入一个\(t\),表示有\(t\)组数据 第二行开始,一共\(t\)行,每行一个整数\(n\),意思如题所示. 输出格式: 共\(t\)行,每行一个数字,表示染色方案数对\(10^9+7\)取模后的结果 说明

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

【转】ACM训练计划

[转] POJ推荐50题以及ACM训练方案 2010-08-21 21:05 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题,2479 和 2593 必做) 2479 和 2593 1015 1042(可贪心) 1141 1050 1080 1221 1260 2411(稍难) 1276 第二类 搜索(至少4题) 1011 1033 1129 2049 2056 2488 2492(稍难,也可并查集) 第三类 贪心(至少2题) 1065 205

【转】 Java 进行 RSA 加解密时不得不考虑到的那些事儿

[转] Java 进行 RSA 加解密时不得不考虑到的那些事儿 1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适 公钥加密,私钥解密.加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无法破解的密文数据.否则的话,你就要考虑你的场景是否有必要用 RSA 了. 2. 可以通过修改生成密钥的长度来调整密文长度 生成密文的长度等于密钥长度.密钥长度越大,生成密文的长度也就越大,加密的速度也就越慢,而密文也就越难被破解掉.著名