2021-07-29 JZYZ集训第一次模拟考试

本文回顾了2021 CSP模拟赛的五道算法题目,包括背单词、自行车比赛、数列分段、刻录光盘等,分析了解题思路和常见错误,提醒参赛者注意字符串排序、贪心策略等关键点。
摘要由CSDN通过智能技术生成

前言

我这次打的很烂。除了第三题的一个二分模板题其他的居然全爆0了。
说实话,在过了一个星期之后我真的发现我当时打的好憋屈啊。反正,CSP可不能犯这种低级错误。
接下来,跟随我的目光,一起来审视一下这次题的难度和我在赛场上打的有多脑残。

既然隔壁Lummerx帮我打广告了,我就打回去
想看大佬NB666写的博客的,可以去关注这个人

T1 背单词

题目描述
Mybing为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他的女朋友lyn为了帮助他,决定对单词进行分类。
两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。
例如“AABAC”,它和“CBAAA”就可以归为一类,而和“AAABB”就不是一类。
现在Mybing有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100。这对于lyn来说太过困难,所有她来求助你,你要告诉lyn小姐姐这些单词会被分成几类。
输入格式
输入文件的第一行为单词个数N,以下N行每行为一个单词。
输出格式
输出文件仅包含一个数,表示这N个单词分成的类数
样例
in:
3
ABAAA
AAAAB
ABCCC
out:
2

分析:替我和LYR大佬默哀。。LYR是不会字符串排序之后的比较,而我是根本没想到字符串排序。(啊啊啊啊啊啊啊啊卧槽)。我直接代入ASCII码一通乱算然后成功样例过了,爆0。
那么这个题最好的做法就是字符串排序了。
s o r t ( s . b e g i n ( ) , s . e n d ( ) ) ; sort(s.begin(),s.end()); sort(s.begin(),s.end());
会用这个,就直接出来了
先开一个巨大的字符串数组,然后每读进一行字符串,就按照字典序给他排序。
如样例中的ABAAA 会被排成AAAAB。这不就跟第二个一样了吗?!
每个字符串内部排好之后,再将全部字符串排一遍。这样下来,全部组成这个字符串的字母的数量相等的字符串就都应是相邻的了。
最后我们要看题,题目问的是**有几个不同的。**那么只要我们在相邻的字符串找到一个不同的,直接ans++。
最后,我想说的是,希望我下次能把题看明白,也希望LYR大佬学会怎么比较字符串(小声)

#include<bits/stdc++.h>
using namespace std;
#define DalaoLYR 1e7
string s[1000001];
long long ans;
long long n;
int main(){
   
	//freopen("word.in","r",stdin);
	//freopen("word.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
   
		cin>>s[i];
		sort(s[i].begin(),s[i].end());
	}
	sort(s+1,s+1+n);
	for(int i=1;i<=n;i++){
   
		if(s[i-1]!=s[i]) ans++;
	}
	cout<<ans<<endl;
	return 0;
}

T2 自行车比赛

assassin非常喜欢自行车比赛,尤其是一年一度龙源湖自行车赛。一年一度的龙源湖自行车赛,需要所有的选手们连续比赛数日,最终按照累计得分决出冠军。2021年一共有 N 位参赛选手。每天的比赛总会决出当日的排名,第一名的选手会获得 N 点得分,第二名会获得 N-1 点得分,第三名会获得 N-2 点得分,依次类推,最后一名会获得 1 点得分。保证没有选手会排名相同。
在之前的数日较量中, N 位选手已经分别累计了一些分数。现在即将开始的是最后一天的比赛。assassin希望知道有多少位选手还有可能获得最终的冠军,也就是说还有多少选手有可能通过最后一天的比赛获得累计总分第一名(其中尧神著名逆风翻盘选手了)。
输入格式
第一行输入一个整数 N,表示参赛选手总数,保证 3<=N<=300000。
之后 N 行,其中第 i 行输入一个整数 B[i]表示第 i 位选手已经获得的累计分数,满足0<=B[i]<=2000000。
输出格式
输出只有一行,只需要输出一个整数,来表示有多少位选手有可能获得最终的冠军。(如果算错,assassin会把银针扎在高老师的大腿上,所以请你救救高老师吧Orz)

分析:这题看出是贪心了但是不想写。(这应该是OI界以来最扯淡的理由)于是干脆写了个随机数交了。爆0。
我自己都被我自己折服了。

这题本质上确实是贪心。
一个人得冠军就要使其得分尽量大,其他人总分尽量小。
那我们开两个数组,读完成绩之后,排序
为什么?因为!我们要枚举第n个人得了多少分!
我们b数组的作用就是存第n个人最后一天得了多少分。
我们推一下,第

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值