UVa 353 - Pesky Palindromes

题目:统计一个串的回文子串的个数。

分析:dp,暴力。由于数据较小,直接暴力求解即可。

说明:(UVa终于进入前800了)。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>

using namespace std;

char str[82];
char ans[3200][82];

int main()
{
	while (~scanf("%s",str)) {
		int count = 0,len = strlen(str);
		for (int i = 1 ; i <= len ; ++ i)
		for (int s = 0 ; s < len ; ++ s) {
			int flag = 1;
			for (int t = s+i-1 ; t >= s ; -- t)
				if (str[s+s+i-1-t] != str[t]) {
					flag = 0;
					break;
				}
			if (flag) {
				for (int j = 0 ; j < i; ++ j)
					ans[count][j] = str[s+j];
				ans[count][i] = 0;
				int same = 0;
				for (int j = 0 ; j < count ; ++ j)
				if (!strcmp(ans[j], ans[count])) {
					same = 1;
					break;
				}
				if (!same) count ++;
			}
		}

		printf("The string \'%s\' contains %d palindromes.\n",str,count);
		/*
		printf("The %d unique palindromes in \'boy\' are",count);
		for (int i = 0 ; i < count-1 ; ++ i) {
			printf(" \'%s\'",ans[i]);
			if (i < count-2)
				printf(",");
			else printf(" and ");
		}
		printf("\'%s\'.\n\n",ans[count-1]);
		*/
	}
	return 0;
}
时间: 2024-12-29 04:17:14

UVa 353 - Pesky Palindromes的相关文章

UVA 之401 - Palindromes

A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDEDCBA" is a palindrome because it is the same when the string is read from left to right as when the string is read from ri

[UVa] Palindromes(401)

UVA - 401 Palindromes Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDED

uva 11584 Partitioning by Palindromes 线性dp

// uva 11584 Partitioning by Palindromes 线性dp // // 题目意思是将一个字符串划分成尽量少的回文串 // // f[i]表示前i个字符能化成最少的回文串的数目 // // f[i] = min(f[i],f[j-1] + 1(j到i是回文串)) // // 这道题还是挺简单的,继续练 #include <algorithm> #include <bitset> #include <cassert> #include <

UVa 401 Palindromes(字符串,回文)

 Palindromes  A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDEDCBA" is a palindrome because it is the same when the string is read from left to right as when the string i

UVa 11584 Partitioning by Palindromes

/*---UVa 11584 Partitioning by Palindromes --用dp[i]表示前i个字母划分成最小回文串的个数,则有dp[i]=min{dp[j]+1}s[j+1...i]是一个回文串,状态O(n)个 每次有O(n)个决策,而判断是否是回文串复杂度O(n),这样总的复杂度O(n^3).如果事先预处理标记一下s[i...j]是否构成 回文串,这样总的复杂度O(n^2).标记s[i...j]是否构成回文串,用vis[i][j](i<=j)来标记,if s[i]!=s[j]

UVa 11583 Partitioning by Palindromes

 Description Problem H: Partitioning by Palindromes We say a sequence of characters is a palindrome if it is the same written forwards and backwards. For example, 'racecar' is a palindrome, but 'fastcar' is not. A partition of a sequence of charact

UVA - 11584 Partitioning by Palindromes[序列DP]

UVA - 11584 Partitioning by Palindromes We say a sequence of char- acters is a palindrome if it is the same written forwards and backwards. For example, ‘racecar’ is a palindrome, but ‘fastcar’ is not. A partition of a sequence of characters is a lis

UVA 11584 一 Partitioning by Palindromes

Partitioning by Palindromes Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 11584 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 char a[1

UVa 401 Palindromes(简单字符串)

简单的判断是否是回文串.镜像串,然后自己写的真费劲,没逃掉刘汝佳的书,这里的代码很有技巧性,特别值得学习,额,其实他书上的代码都很精简 Character Reverse Character Reverse Character Reverse A A M M Y Y B   N   Z 5 C   O O 1 1 D   P   2 S E 3 Q   3 E F   R   4   G   S 2 5 Z H H T T 6   I I U U 7   J L V V 8 8 K   W W