why?
查看原帖
why?
114346
chubeiliang楼主2020/12/28 13:01

样例是对的,但测试点一错了......

#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
inline int read() {
	register int s=0,f=1;
	register char ch=getchar();
	if(ch=='-')f=-1,ch=getchar();
	while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
	return s*f;
}
inline int write(int a) {
	if(a<0) {
		putchar('-');
		a=-a;
	}
	int s[20],top=0;
	while(a) {
		s[++top]=a%10;
		a/=10;
	}
	if(!top)s[++top]=0;
	while(top)putchar(s[top--]+'0');
	return 0;
}
int c[1000001],h[20010];
int main() {
	int n=read(),m=read(),a,b,sum=0,l=1,len,r;
	for(int i=1; i<=n; i++)
		c[i]=read();
	for(int i=1; i<=n; i++) {
		h[c[i]]++;
		if(h[c[i]]==1)sum++;
		if(sum==m) {
			b=i;
			break;
		}
	}
	while(h[c[l]]>1) {
		h[c[l]]--;
		l++;
	}
	a=l;
	len=b-a;
	r=b;
	while(r<n) {
		r++;
		h[c[r]]++;
		while(h[c[l]]>1) {
			h[c[l]]--;
			l++;
		}
		if(r-l<len) {
			a=l;
			b=r;
			len=b-a;
		}
	}
	printf("%d %d",a,b);
	return 0;
} 

求大佬告知原因

2020/12/28 13:01
加载中...