0%

第一次codeforces

今天第一次在传说中的codeforces上打了一次线上赛,只A了一道题,而且最近还是太久没用C++了(数模等用python,单片机用C),对C++有点生疏了。

简单记录一下我写了的(包括没过的)几题,刚学尽量做点记录,比赛页面:Codeforces Round 950 (Div. 3)

因为都是英文题,我英语也不好,所以每题只用中文概括

A题

要举办m场比赛,每场比赛需要A-G题各一题,且每道题只能用一次,题库里有n题,问至少要出几道新题。

大概思路:统计题库内A-G各几题,然后不够的补上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int t;
cin>>t;
while(t--){
int n,m,sum=0,p[7]={0};
string str;
cin>>n>>m>>str;
for(auto ch:str){
++p[ch-’A‘];
}
for(auto a:p){
sum+=max(0,m-a);
}
cout<<sum<<endl;
}

非常简单的题,然而我就只对了这题。

B题

n个数,标记第f个(从1开始的第f个),然后将数组按照从大到小的顺序排序,之后移除第k个数,如果一定被移除则输出”YES”,有可能被移除输出”MAYBE”一定不会被移除输出”NO”。

这题不知道是我理解有问题还是什么,我看样例都不对。

我的思路是:用a保存标记数的值,用c保存被标记的数的值出现的次数,如果要移除的数的值等于a,且个数为1,那就是一定被移除了。如果个数大于1就是可能被移除。否则就是一定不会被移除。

C题

一组数a,通过一系列值的修改(一次修改一个),变成了数组b,给你数组a和b和一系列修改值d,问能否通过d将a变成b。每一个修改值都需要被使用。

刚刚重新读题才发现,要按顺序应用修改值d,之前比赛的时候没有注意到。

大概思路:因为要按顺序应用,如果最后一个修改值不在b内,那就可以直接输出NO了。其他就是正常的看a和b不同的地方,能不能找到d来修改。

D题

能否从a中最多只移除一个数,使得构建的相邻最大公约数序列不下降。

大概思路:移除第i个数会改变第i-1个的最大公约数和移除原本的第i个最大公约数。也就是说如果最大公约数序列中如果有超过两处不满足不下降的数,那一定不能通过移除一个数使其不下降。