#jsongs. 2026暑假CSP-J模拟赛04-T2 程老师的循环歌单
2026暑假CSP-J模拟赛04-T2 程老师的循环歌单
【文件读写】本题使用文件读写:输入文件
songs.in,输出文件songs.out。
时间限制:1000ms 内存限制:512MB
题目描述
程老师最近迷上了一个音乐播放软件。这个软件有个很有意思的功能:它会把用户收藏的所有歌曲排成一条长长的列表,每首歌对应一个编号。程老师的歌单里一共有 首歌,从左到右依次排列,第 首歌的编号为 。
歌单里的歌并不一定首首不同。有些歌程老师特别喜欢,会反复收藏好多遍;有些歌可能是软件自动推荐时重复添加的;还有些歌虽然名字不同,但系统分配了相同的编号,被软件视为同一首歌。总之,不同位置上的歌完全可能拥有相同的编号,这在歌单里是再正常不过的事。歌单的总长度可能很大,成千上万首歌挤在一起也是常有的。
程老师每天坐地铁通勤的时候,会从歌单里挑一段来听。他的挑选方式很规矩:必须是连续的一段,不能跳着选。具体来说,他会定好左端和右端两个位置 、(),然后从第 首开始,一首接一首地听到第 首,中间不间断、不跳过。这段连续歌单的长度就是 首。
不过程老师的耳朵有个怪脾气。他可以容忍同一首歌在连续歌单里出现两次——毕竟好歌听两遍不嫌多。但如果同一首歌出现三次甚至更多,他就会浑身不自在,觉得这段歌单调得发腻。用更准确的话来说:对于任意一个编号 ,它在所选的连续区间 中出现的总次数不能超过 。如果存在某个编号出现了 次或以上,这段歌单就是不合法的,程老师绝不会选它。这个规则对区间里的每一种编号都独立生效。
程老师想在通勤路上尽可能多听几首歌,所以他希望选出的合法连续歌单段越长越好。问题是,这个歌单实在太长了,手动挑来挑去既费时又容易遗漏,光靠肉眼扫一遍很难确定最优的起点和终点在哪里。请你写一个程序,帮程老师算出满足条件的最长连续歌单段的长度。
输入格式
第一行一个正整数 ,表示歌单里歌的数量。
第二行 个正整数 ,依次表示每首歌的编号。
输出格式
一行一个整数,表示满足条件的最长连续歌单段的长度。
数据范围
| 测试点编号 | 特殊性质 | |
|---|---|---|
| 1 | 无 | |
| 2~4 | ||
| 5~8 | ||
| 9~10 | ||
| 11~12 | A | |
| 13~14 | B | |
| 15~20 | 无 |
特殊性质 A:歌单里只有 种不同的编号。
特殊性质 B:所有编号两两不同。
对于全部数据,,。
样例输入 1
8
1 2 1 3 1 2 4 5
样例输出 1
7
样例输入 2
5
7 7 7 7 7
样例输出 2
2
样例输入 3
6
1 2 3 1 2 3
样例输出 3
6
样例解释
对第一个样例,可以选第 首到第 首这一段:编号 出现 次,编号 出现 次,编号 、、 各出现 次,没有编号出现超过 次,长度为 。
- ID
- 696
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者
相关
在下列比赛中: