记人生中第一场认真打的CF(虽然是Virtual participation)

老师说下午要让我们(来自开明的新高一同学)感受一下CF,于是下午2:20我们就集中到了机房。老师教我们怎么开一场Virtual participation,然后就让我们自己打了。

拿到题目先看A题,大意就是让你通过修改最少的字符(不能删除或添加),将A组字符串修改为B组(不考虑顺序,保证有解)。拿到题目我就傻眼了,一般CF的div2的题目AB都是比较的简单的呀,而这一道题拿到手尽然毫无思路,以至于丧失了理智,一上来先把A和B全都按字典序排了一下序,然后对应比较,然后成功地Wrong answer on test 7……
然后我看到红色的WA,冷静过来,开始理智地分析。因为这些字符串全是T恤衫的编号,所以一共只能有一下几种字符串:

L
M
S
XL
XS
XXL
XXS
XXXL
XXXS

题目又保证有解,所以每种长度的字符串在两组中的数量是一样的。可以发现,把通长度的一个字符串替换为另一个,代价只需要1。因此,我们只需要统计一组中每种字符串的出现次数,然后在把另一组的每一个字符串在A中找有没有相同串,有就把该串的数量-1,否则ans++。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#include<iostream>
#include<map>
using namespace std;

const int maxn=100+7;
int n,ans;string a[maxn],b[maxn];
map<string,int>m;

int main(){
    ios::sync_with_stdio(false);cin>>n;for(register int i=1;i<=n;++i)cin>>a[i],m[a[i]]++;
    for(register int i=1;i<=n;++i){cin>>b[i];if(m[b[i]])--m[b[i]];else ++ans;}
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/hankeke/p/CF1000.html