求优化QWQ
查看原帖
求优化QWQ
637788
kimi0705楼主2023/7/10 23:10
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n;
struct node {
	int num;
	char last;
	string s;
};
vector <node> s;
vector <string> ans1, ans2;
bool aeiou ( char ch ) {
	return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
}
int num_of_aeiou ( string a ) {
	int cnt = 0;
	for ( char i : a ) if ( aeiou ( i ) ) cnt++;
	return cnt;
}
char last_aeiou ( string s ) {
	for ( int i = s.size() - 1; i >= 0; i-- ) if ( aeiou ( s[i] ) ) return s[i];
	return 0;
}
bool cmp ( node a, node b ) {
	if ( a.num != b.num ) return a.num < b.num;
	return a.last < b.last;
}
int main() {
	cin >> n;
	s.resize ( n );
	for ( node &i : s ) cin >> i.s, i.num = num_of_aeiou ( i.s ), i.last = last_aeiou ( i.s );
	sort ( s.begin(), s.end(), cmp );
	for ( int i = 0; i < (long long)s.size() - 1; i++ )
		if ( s[i].num == s[i + 1].num && s[i].last == s[i + 1].last ) {
			ans2.push_back ( s[i].s ), ans2.push_back ( s[i + 1].s ), s.erase ( s.begin() + i ), s.erase ( s.begin() + i ), i--;
		}
	for ( int i = 0; i < (long long)s.size() - 1; i++ ) if ( s[i].num == s[i + 1].num ) ans1.push_back ( s[i].s ), ans1.push_back ( s[i + 1].s ), i++;
	while (ans2.size() >= ans1.size() + 4) {
		ans1.push_back(ans2.back());
		ans2.pop_back();
		ans1.push_back(ans2.back());
		ans2.pop_back();
	}
	cout << min(ans1.size(), ans2.size()) / 2 << '\n';
	for (int i = 0; i < min(ans1.size(), ans2.size()); i++) cout << ans1[i] << ' ' << ans2[i] << '\n';
	return 0;
}
2023/7/10 23:10
加载中...