0
已解决
张恩泽
高级天翼
高级天翼
4374 买糖果(candy)
经验值:1600 时间限制:1000毫秒
题目描述 Description
小卖部现在在 n 个盒子里摆放了正在出售的 m (m <= n)种不同口味糖果。每种糖果售价1元。
小P希望可以尝到所有口味的糖果,但是他没有足够多的钱。他只能一次**买从第a个盒子到第b个盒子的所有糖果。
为了尝到所有口味的糖果,又不愿意花太多的钱。小P想请你写一个程序决定他买糖果的策略,即求出 a 和 b 的值。
输入描述 Input Description
第一行是 N 和 M,分别代糖果盒子的总数和糖果的种数。
其后的一行包含 N 个数字,它们都介于 1 和 M 之间,代表该糖果是哪种口味。
输出描述 Output Description
a和 b(a<=b) 由一个空格符所隔开。
保证有解,如果多解,输出a最小的。
样例输入 Sample Input
12 5 2 5 3 1 3 2 4 1 1 5 4 3
样例输出 Sample Output
2 7
数据范围及提示 Data Size & Hint
约定 30%的数据N<=200 , M<=20
60%的数据N<=10000 , M<=1000
100%的数据N<=1000000 , M<=2000
给点思路就行
0
已采纳
武奕楷
新手天翼
新手天翼
核心:
int i=1,j=m;
while(j<=n){
while(j<=n&&ans!=m){
if(cnt[a[++j]]==0) ans++;
cnt[a[j]]++;
}
if(j-i+1<minn){
x=i,y=j,minn=j-i+1;
}
cnt[a[i]]--;
if(cnt[a[i]]==0) ans--;
i++;
}
cout<<x<<" "<<y;
0
0