AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 1. Elementary Problem Solving ::Sorting/Searching
Description
对于 26 个英文字母, 规定其值如下表:
对于一个名字, 规定 consonant values 和 vowel values 的计算方式如下:
要求构造一姓名, 规则如下:
Type
Sorting/Searching
Analysis
由于元音和辅音之间互不干涉, 且规则相似, 所以可以分开来做 。
先将需要用到的元音放到一个字符串中, 值最小的优先。
然后对该字符串排序, 则可以保证 vowel values 最小, 且字典序最小。
辅音的做法类似, 最后将构造出来的两个字符串合并即可。
Solution
// UVaOJ 10785
// The Mad Numerologist
// by A Code Rabbit
#include
#include
#include
using namespace std;
const char VOWEL[] = "AUEOI";
const char CONSONANT[] = "JSBKTCLDMVNWFXGPYHQZR";
int n;
int main() {
int T;
cin >> T;
for (int t = 1; t <= T; t++) {
// Input.
cin >> n;
// Solve.
string vowel, consonant;
for (int i = 1, idx = 0; i <= (n + 1) / 2; i++) {
vowel += VOWEL[idx];
if (i % 21 == 0) idx++;
}
for (int i = 1, idx = 0; i <= n / 2; i++) {
consonant += CONSONANT[idx];
if (i % 5 == 0) idx++;
}
sort(vowel.begin(), vowel.end());
sort(consonant.begin(), consonant.end());
// Output.
cout << "Case " << t << ": ";
for (int i = 1; i <= n; i++)
cout << (i % 2 ? vowel[i / 2] : consonant[i / 2 - 1]);
cout << endl;
}
return 0;
}