UVa 1610 聚会游戏
发布时间
阅读量:
阅读量
题意:
给定一个包含n个字符串的集合D,需要找出一个长度最短的字符串S(该字符串可能不在D中),使得集合D中有恰好一半的字符串小于等于S,另一半的字符串大于S。若存在多个符合条件的解,则输出字典序最小的那个。
分析:
采用向量进行存储,随后进行排序操作,选取中间位置的两个元素作为基准。接着逐步增大第一个元素,例如从ABC依次变为AC、B等,并不断验证其与第二个元素之间的关系。当第一个元素超过第二个元素时,停止循环。需要注意的是,在特定情况下,如AZC,按照上述算法会将Z递增为下一个字符,但在ASCII编码中该字符并非字母,因此需要单独处理这一特殊情况。
代码:
#include<bits/stdc++.h>
#define LL long long
#define ms(s) memset(s, 0, sizeof(s))
using namespace std;
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
int n;
while(cin >> n && n)
全部评论 (0)
还没有任何评论哟~
