博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #566 (Div. 2) C. Beautiful Lyrics
阅读量:6598 次
发布时间:2019-06-24

本文共 3727 字,大约阅读时间需要 12 分钟。

链接:

题意:

You are given n words, each of which consists of lowercase alphabet letters. Each word contains at least one vowel. You are going to choose some of the given words and make as many beautiful lyrics as possible.

Each lyric consists of two lines. Each line consists of two words separated by whitespace.

A lyric is beautiful if and only if it satisfies all conditions below.

The number of vowels in the first word of the first line is the same as the number of vowels in the first word of the second line.

The number of vowels in the second word of the first line is the same as the number of vowels in the second word of the second line.
The last vowel of the first line is the same as the last vowel of the second line. Note that there may be consonants after the vowel.
Also, letters "a", "e", "o", "i", and "u" are vowels. Note that "y" is never vowel.

For example of a beautiful lyric,

"hello hellooowww"

"whatsup yowowowow"

is a beautiful lyric because there are two vowels each in "hello" and "whatsup", four vowels each in "hellooowww" and "yowowowow" (keep in mind that "y" is not a vowel), and the last vowel of each line is "o".

For example of a not beautiful lyric,

"hey man"

"iam mcdic"

is not a beautiful lyric because "hey" and "iam" don't have same number of vowels and the last vowels of two lines are different ("a" in the first and "i" in the second).

How many beautiful lyrics can you write from given words? Note that you cannot use a word more times than it is given to you. For example, if a word is given three times, you can use it at most three times.

思路:

模拟,记录元音个数和最后一个元音,根据个数,和最后一个元音排序。将元音个数相等最后一个元音不等的放到一个对里,将个数相等最后一个元音也相等的放到另一个对里。

挨个输出。当元音相等的较多时,补充一下即可。
因为vector的size是无符号整数,不能直接相减,因为这个wa2多次。。

代码:

#include 
using namespace std;typedef long long LL;const int MAXN = 1e5 + 10;const int MOD = 1e9 + 7;int n, m, k, t;struct Word{ string word; int num; char last; bool operator < (const Word& that) const { if (this->num != that.num) return this->num < that.num; return this->last < that.last; }}words[MAXN];int main(){ ios::sync_with_stdio(false), cin.tie(0); cin >> n; for (int i = 1;i <= n;i++) { cin >> words[i].word; for (auto c:words[i].word) { if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') { words[i].num++; words[i].last = c; } } } sort(words+1, words+1+n); vector
> fi, se; int pos = 1; int w = -1, cnt = 1; while(pos <= n) { if (words[pos].num == words[pos+1].num && words[pos].last == words[pos+1].last) { se.emplace_back(make_pair(pos, pos+1)); pos += 2; } else if (words[pos].num != cnt) { w = pos; cnt = words[pos].num; pos++; } else if (w == -1) { w = pos; pos++; } else { fi.emplace_back(make_pair(w, pos)); w = -1; pos++; } } int s1 = fi.size(), s2 = se.size(); int res = 0; res += min(s1, s2) + max(0, (s2-s1)/2); cout << res << endl; int i; for (i = 0;i < min(fi.size(), se.size());i++) { cout << words[fi[i].first].word << ' ' << words[se[i].first].word << endl; cout << words[fi[i].second].word << ' ' << words[se[i].second].word << endl; } for (;i+1 < se.size();i+=2) { cout << words[se[i].first].word << ' ' << words[se[i+1].first].word << endl; cout << words[se[i].second].word << ' ' << words[se[i+1].second].word << endl; } return 0;}

转载于:https://www.cnblogs.com/YDDDD/p/11009880.html

你可能感兴趣的文章
Js构造对象-添加方法的三种方式
查看>>
Linux使用Shell脚本实现ftp的自动上传下载(转)
查看>>
Scala学习(五)练习
查看>>
mysql 5.1.26_mysql5.1.26安装配置方法详解
查看>>
java 缓存技术_java初探(1)之缓存技术
查看>>
java使用json_java使用json
查看>>
java 数组有序_Java有序数组
查看>>
Java配置环境变量、方法和原因
查看>>
23种设计模式(3):抽象工厂模式
查看>>
防火墙导致MySQL无法访问的问题解决案例
查看>>
Jquery 选择器注意的问题--记录(五)
查看>>
Log4net入门使用
查看>>
PHP正则表达式完全手册
查看>>
友盟自定义分享-生成带图片的二维码,自定义分享布局
查看>>
【R】shiny界面
查看>>
gnl总结(#,%,$)
查看>>
Java 多线程编程两个简单的例子
查看>>
PB+MS SQL+触发器必须指出
查看>>
UVa 340 Master-Mind Hints
查看>>
Linux 的 Shell
查看>>