UVA - 1610 Party Games 贪心
2015-04-14 23:03
260 查看
题目大意:给出2*n个字符串,要求你将这些字符串分成两组,一组是小于等于目标字符串的,一组是大于目标字符串的,这两组字符串的个数要相等,现在要求你求出这个目标字符串,使得目标字符串的长度尽量短且字典许最小
解题思路:先排序,再找出两组的边界字符串,比较这两个字符串
如果位置上的字符相等的话就照抄
设大的字符串为b,小的字符串为a,目标字符串为ans
if(b[i] == a[i]) ans += a[i]
在上面条件不成立的情况下再讨论:
1.if(i == a.size() - 1) 也就是说扫描到a的最后一个了,那么ans += a[i]
2.if(b[i] - a[i] > 1 || i != b.size() - 1) ans += a[i] + 1
表示b字符串的字符比a字符串的字符至少大于2或者b字符串的字符比a字符串的字符大一且b字符串还没有扫描
3.是b字符串扫描到最后一个了,且b字符串的最后一个字符比a字符串的该位置字符之差为1,这就要再扫描一下a字符串了
I. if(a.size() - 1 == j || a[j] == ‘Z’) ans += a[j] 扫描完的话就直接赋值或者无法改变值了就照搬
排除上面的情况,只需要ans += a[j] + 1就比a字符串大了
具体看代码
解题思路:先排序,再找出两组的边界字符串,比较这两个字符串
如果位置上的字符相等的话就照抄
设大的字符串为b,小的字符串为a,目标字符串为ans
if(b[i] == a[i]) ans += a[i]
在上面条件不成立的情况下再讨论:
1.if(i == a.size() - 1) 也就是说扫描到a的最后一个了,那么ans += a[i]
2.if(b[i] - a[i] > 1 || i != b.size() - 1) ans += a[i] + 1
表示b字符串的字符比a字符串的字符至少大于2或者b字符串的字符比a字符串的字符大一且b字符串还没有扫描
3.是b字符串扫描到最后一个了,且b字符串的最后一个字符比a字符串的该位置字符之差为1,这就要再扫描一下a字符串了
I. if(a.size() - 1 == j || a[j] == ‘Z’) ans += a[j] 扫描完的话就直接赋值或者无法改变值了就照搬
排除上面的情况,只需要ans += a[j] + 1就比a字符串大了
具体看代码
[code]#include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<iostream> using namespace std; #define maxn 1010 string str[maxn]; int n; void init() { for(int i = 0; i < n; i++) getline(cin,str[i]); sort(str,str+n); } void solve() { string a = str[n / 2 - 1]; string b = str[n / 2]; string ans; for(int i = 0; i < a.size() && i < b.size(); i++) { if(a[i] == b[i]) ans += a[i]; else { if(i == a.size() - 1) ans += a[i]; else if(b[i] - a[i] > 1 || i != b.size() - 1) { ans += (a[i] + 1); break; } else { ans += a[i]; for(int j = i + 1; j < a.size(); j++) if(j == a.size() - 1 || a[j] == 'Z') ans += a[j]; else { ans += (a[j] + 1); break; } break; } } } cout << ans << endl; } int main() { while(scanf("%d", &n) == 1 && n) { getchar(); init(); solve(); } return 0; }
相关文章推荐
- uva 1610 Party Games (贪心+STL字符串)
- UVA - 1610 - Party Games(模拟or枚举)
- Party Games UVA - 1610
- UVA 1610(p253)----Party Games
- UVA-1610 Party Games (构造)
- Uva - 1610 - Party Games
- Party Games UVA - 1610
- Uva - 1610 - Party Games
- UVA1610:Party Games(聚会游戏)
- UVa 1610 Party Games——细节处理
- UVA 1610 - Party Games
- Party Games(uva 1610) 卡细节
- [UVa 1610] 聚会游戏(Party Games)
- uva 1610 Party Games
- UVA 1610-Party Games(聚会游戏)
- UVa:1610 Party Games(字符串处理)
- 习题8-2 UVA - 1610 Party Games 聚会游戏 (构造字符串)
- Party Games UVA - 1610 暴力
- 【习题 8-2 UVA-1610】Party Games
- UVA 1610 Party Games