2019.11.02日常总结兼onecode复赛模拟五A和C题

【A】:

【思路】:完全的模拟题
【代码】:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int a,b;
int main(){
	scanf("%d%d",&a,&b);
	if (b-a>1) printf("NO\n");
	else if (a>b&&!(a==9&&b==1)) printf("NO\n");
	else printf("YES\n");
	return 0;
}

【C】:

【思路】: 一段段的截取即可,类似于尺取法
【代码】:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define gc getchar()
#define g(c) isdigit(c)
inline int read(){
	char c=0;int x=0;bool f=0;
	while (!g(c)) f=c=='-',c=gc;
	while (g(c)) x=x*10+c-48,c=gc;
	return f?-x:x;
}
const int N=1e6+100;
const int M=2e6+100;
int cnt,a[N],ans,i,d,k;
int b[M],n,test_number;
inline void push(int k){
	if (a[b[k]]==0) cnt++;
	a[b[k]]++;//加入一个电台
}
inline void dele(int k){
	a[b[k]]--;//删除一个电台
	if (a[b[k]]==0) cnt--;
}
int main(){
	test_number=read();
	while (test_number--){
		memset(a,0,sizeof(a));cnt=0;
		n=read();k=read();d=read();
		for(i=1;i<=n;i++)
			b[i]=read();
		for(i=1;i<=d;i++)
			push(i);
		ans=cnt;
		for(i=d+1;i<=n;i++){
			dele(i-d);push(i);
			ans=min(ans,cnt);
		}
		printf("%d\n",ans);
	}
	return 0;
}
发布了82 篇原创文章 · 获赞 4 · 访问量 1790

猜你喜欢

转载自blog.csdn.net/ZHUYINGYE_123456/article/details/102876560