uva 10716 Evil Straw Warts Live(贪心回文串)
这道题目我用了一上午才做出来,还是看的别人的思路,尽管没有看代码做的有点慢。代码能力还是得加强啊。思维
得缜密。不能想当然,要有根据,写上的代码要有精确度。省的以后还得慢慢调试
思路:贪心。每次都查看两端位置上的字母是否相等。若不相等就在里面查找能使他们相等且所需移动位置最少的那
个。然后交换。记录交换的距离,贪心的离最后一个由近及远找与第一个位置相等的。同理贪心从第一个位置找和最
后一个位置相等且离第一个位置近期的。
。
。感觉这样的方法确实能够,可是并不会证明这样的策略的正确性。。
。
代码:
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<vector>
- #include<set>
- #include<string>
- #include<algorithm>
- using namespace std;
- int a[30];
- string s;
- void swap1(int x,int y)
- {
- char ch = s[x];
- for(int i=x; i<y; i++)
- {
- s[i] = s[i+1];
- }
- s[y] = ch;
- return ;
- }
- void swap2(int x,int y)
- {
- char ch = s[y];
- for(int i=y; i>x; i--)
- {
- s[i] = s[i-1];
- }
- s[x] = ch;
- return ;
- }
- int cost;
- void solve()
- {
- int i,j;
- for(i=0; i<(s.size()/2); i++)
- {
- //cout << "i = "<<i << endl;
- if(s[i]!=s[s.size()-1-i])
- {
- for(j=1; j<=s.size()-1-1-i-i; j++)
- {
- if(s[j+i]== s[s.size()-1-i])//推断是否和最后一个相等。若相等就放到对称位置
- {
- swap2(i,i+j);//准确写出移动函数
- //cout << s << endl;
- cost += j;//移动距离
- break;
- }
- else if(s[s.size()-1-i-j] == s[i])//推断是否和第一个相等。若相等就和最后一个互换。即它的最后一个位置(这里所说第一个位置是当前推断的位置不是所有序列的第一个)
- {
- swap1(s.size()-1-i-j,s.size()-1-i);//注意调用的移动函数是否可行
- //cout << s << endl;
- cost+= j;
- break;
- }
- }
- }
- }
- return ;
- }
- int main()
- {
- int T,i;
- int ans;
- cin >> T;
- getchar();
- while(T--)
- {
- ans = 0;
- memset(a,0,sizeof(a));
- s.clear();
- cin >> s;
- getchar();
- for(i=0; i<s.size(); i++)
- {
- a[s[i]-'a']++;
- }
- int flag = 0;
- for(i=0; i<26; i++)//预处理能否够构成回文数
- {
- if(a[i]%2!=0)
- {
- ans++;
- }
- }
- cost = 0;
- if(ans > 1)
- cout << "Impossible" << endl;
- else
- {
- solve();
- cout << cost << endl;
- }
- }
- return 0;
- }
uva 10716 Evil Straw Warts Live(贪心回文串)的更多相关文章
- UVA 10716 Evil Straw Warts Live(贪心)
Problem D: Evil Straw Warts Live A palindrome is a string of symbols that is equal to itself when re ...
- poj 1854 Evil Straw Warts Live 变成回文要几次
Evil Straw Warts Live Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 1799 Accepted: ...
- UVa 10716 - Evil Straw Warts Live
题目大意:给一个字符串,判断是否能通过交换字母构成回文,如果能,计算所需的最小交换次数. 如果字符串中出现奇数次的字母的个数>1,则不能构成回文.然后...就没思路了...看网上说用贪心的思想先 ...
- UVA 12378 Ball Blasting Game 【Manacher回文串】
Ball Blasting Game Morteza is playing a ball blasting game. In this game there is a chain of differe ...
- Educational Codeforces Round 2 C. Make Palindrome —— 贪心 + 回文串
题目链接:http://codeforces.com/contest/600/problem/C C. Make Palindrome time limit per test 2 seconds me ...
- POJ 1854 - Evil Straw Warts Live
Description A palindrome is a string of symbols that is equal to itself when reversed. Given an inpu ...
- Uva 11584,划分成回文串
题目链接:https://uva.onlinejudge.org/external/115/11584.pdf 题意: 一个字符串,将它划分一下,使得每个串都是回文串,求最少的回文串个数. 分析: d ...
- UVA - 11584 划分字符串的回文串子串; 简单dp
/** 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34398 UVA - 11584 划分字符串的回文串子串: 简单 ...
- uva 10453 【回文串区间dp】
Uva 10453 题意:给定字符串,问最少插入多少个字符使其变成回文串,并任意输出一种结果. 题解:和Uva 10739类似,这里是只能增加.类似定义dp[i][j]表示子串Si...Sj变为回文串 ...
随机推荐
- [ CCO 2015 ] Artskjid
\(\\\) \(Description\) \(N\)个点\(M\)条边的有向图,求从\(0\)号节点出发,\(N-1\)号节点结束,且图中每个点至多经过一次的最长路. \(N\in[2,18]\) ...
- (转)全文检索技术学习(三)——Lucene支持中文分词
http://blog.csdn.net/yerenyuan_pku/article/details/72591778 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程: 从一个Re ...
- 02C语言基本语法
C语言基本语法 注释 //行注释 /* 块注释*/ 标识符 标识符是用来标识变量.函数.任何其他用户自定义项目的名称:一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母.下划 ...
- react 返回上一页
import * as React from 'react' import { Layout } from 'antd'; import creatHistory from 'history/crea ...
- 【Redis】四、Redis设计原理及相关问题
(六)Redis设计原理及相关问题 通过前面关于Redis五种数据类型.相关高级特性以及一些简单示例的使用,对Redis的使用和主要的用途应该有所掌握,但是还有一些原理性的问题我们在本部分做一个探 ...
- 浅谈java浅拷贝和深拷贝
前言:深拷贝和浅拷贝的区别是什么? 浅拷贝:被复制的对象的所有变量都含有原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之, 浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.深拷 ...
- 洛谷——P1775 古代人的难题_NOI导刊2010提高(02)&& P1936 水晶灯火灵(斐波那契数列)
P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵 斐波那契数列 1.x,y∈[1…k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满 ...
- linux hexdump-显示文件十六进制格式
博主推荐:获取更多 linux文件内容查看命令 收藏:linux命令大全 hexdump命令一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件. 语法 hexdu ...
- request在作用域中管理属性
request在作用域中管理属性 制作人:全心全意 在作用域中管理属性 setAttribute(String name,Object object) name:表示变量名,为String类型,在转发 ...
- E - Cricket Field
Description Once upon a time there was a greedy King who ordered his chief Architect to build a fi ...