P8040 [COCI2016-2017#7] IGRA 题解
原题链接
题意
给定只包含
范围:
分析
首先有且仅有
怎样保证不等呢?记
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 10;
int n;
char s[N];
int cnt[3], aim[3];
//用 0, 1, 2 代表 a, b, c
int main() {
scanf("%d%s", &n, s + 1);
for (int i = 1; i <= n; i++)
if (s[i] == 'a') cnt[0]++;
else if (s[i] == 'b') cnt[1]++;
else cnt[2]++;
scanf("%s", s + 1);
for (int i = 1; i <= n; i++)
if (s[i] == 'a') aim[0]++;
else if (s[i] == 'b') aim[1]++;
else aim[2]++;
for (int i = 1; i <= n; i++)
if (s[i] == 'a') {
aim[0]--;
if (cnt[1] && cnt[1] - 1 + cnt[2] >= aim[0] && cnt[1] - 1 + cnt[0] >= aim[2]) cnt[1]--, printf("b");
else cnt[2]--, printf("c");
} else if (s[i] == 'b') {
aim[1]--;
if (cnt[0] && cnt[0] - 1 + cnt[1] >= aim[2] && cnt[0] - 1 + cnt[2] >= aim[1]) cnt[0]--, printf("a");
else cnt[2]--, printf("c");
} else {
aim[2]--;
if (cnt[0] && cnt[0] - 1 + cnt[1] >= aim[2] && cnt[0] - 1 + cnt[2] >= aim[1]) cnt[0]--, printf("a");
else cnt[1]--, printf("b");
}
return 0;
}
后话
建议评橙,考场上很快就想到正解了,不是很难的贪心,听机房的人说可以用爆搜过,tql
这是本蒟蒻的第一篇题解,有什么错还请dalao指出。