poj 1854 贪心。。。(把一个字符串改成回文串的最小操作数)
2017-04-14 15:59
232 查看
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int T,count[27]; char str[8888]; scanf("%d",&T); while(T--) { int res=0,cnt=0; memset(count,0,sizeof(count)); scanf("%s",str); int len=strlen(str); for(int i=0;i<len;i++) { count[str[i]-'a']++; } for(int i=0;i<26;i++) { if(count[i]&1) cnt++; } if(cnt>1) printf("Impossible\n"); else { int lo1,lo2; for(int i=0,j=len-1;i<j;i++,j--) { if(str[i]==str[j]) continue; for(int k=j;k>=i;k--) { if(k!=i&&str[k]==str[i]) { lo1=k; break; } lo1=k; } for(int k=i;k<=j;k++) { if(k!=j&&str[k]==str[j]) { lo2=k; break; } lo2=k; } if((j-lo1)>(lo2-i)) { res+=lo2-i; for(int k=lo2;k>i;k--) swap(str[k],str[k-1]); } else { res+=j-lo1; for(int k=lo1;k<j;k++) swap(str[k],str[k+1]); } } printf("%d\n",res); } } }
相关文章推荐
- POJ 3280 Cheapest Palindrome (将一个字符串变为回文串的最小代价) 区间dp
- 【2013微软校招面试题】求给定的一个字符串最小需要添加多少个字符才能成为回文串
- (字符串的模式匹配4.7.18)POJ 2406 Power Strings(求一个字符串的最小重复串)
- (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)
- (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)
- (字符串的模式匹配4.7.18)POJ 2406 Power Strings(求一个字符串的最小重复串)
- (Relax 贪心1.4)POJ 2325 Persistent Numbers(使用贪心策略解决这么一个问题: 给定一个数n,求一个最小的数m,使得m的各位的乘积==n)
- poj 1328 Radar Installation 已知一定数量的区间,求最小数量的点,使得每个区间内斗至少存在一个点 贪心
- 【codeforces 724D】【贪心】 Dense Subsequence 【一个字符串,按照一定的区间要求从中选出一些字符,使得这串字符的sort后字典序最小】
- poj 2406字符串最小环节的应用
- POJ 1789 求车类型字符串距离最小值 最小生成树 prim算法
- POJ 1789 求车类型字符串距离最小值 最小生成树 prim算法
- 在一个字符串中找到最长的回文串
- C++常考的上机题型:判断一个字符串是否为回文串(递归实现)
- POJ1258--贪心&最小生成树的prim算法
- 庞果网的一个算法题目:最小操作数
- poj 3280 判断得到回文串的时候最小花费
- DP问题--求取一个字符串回文串的多少
- 在一个字符串中找出包含特定字符串的最小窗口
- POJ 1509(字符串最小表示)