2019.11.02日常総括兼onecode複試合シミュレーション五AとC題

13995 ワード

【A】:
【考え方】:完全なシミュレーション問題【コード】:
#include 
#include 
#include 
#include 
using namespace std;
int a,b;
int main(){
	scanf("%d%d",&a,&b);
	if (b-a>1) printf("NO
"
); else if (a>b&&!(a==9&&b==1)) printf("NO
"
); else printf("YES
"
); return 0; }

【C】:
【考え方】:一段の切り取りでいい、尺取り法に似ている【コード】:
#include 
#include 
#include 
#include 
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
"
,ans); } return 0; }