为什么这题能让O(NQ)的算法淦过去啊,想不明白=-=
查看原帖
为什么这题能让O(NQ)的算法淦过去啊,想不明白=-=
58399
狸狸养的敏敏楼主2020/6/5 20:43
#include<bits/stdc++.h>
#define reg register
#define i64 long long
using namespace std;
int read(){int x=0,f=0;char ch=0;while(!isdigit(ch))f|=(ch=='-'),ch=getchar();while(isdigit(ch))(x*=10)+=(ch^48),ch=getchar();return f?-x:x;}
void Ot(int x){if(x<0)putchar('-'),x=-x;if(x>=10)Ot(x/10);putchar(x%10+48);}
void Print(int x,char til='\n'){Ot(x);putchar(til);}
int Max(int x,int y){return x>y?x:y;}
int Min(int x,int y){return x<y?x:y;}
int Abs(int x){return x<0?-x:x;}
const int MAXN=2020;
//int f[33][MAXN]; 
int n;int a[MAXN];
char Gc(){char ch=0;while(!isalpha(ch))ch=getchar();return ch;}
signed main(){
	#ifndef ONLINE_JUDGE
		freopen("C:/Users/Administrator/Desktop/data.txt","r",stdin);
		freopen("C:/Users/Administrator/Desktop/out.txt","w",stdout);
	#endif
	n=read();
	for(reg int i=1;i<=n;i++)a[i]=Gc()-'a'+1;
	
	/*for(reg int k=1;k<=26;k++)
		for(reg int i=1;i<=n;i++){
			reg int tot=0;
			for(reg int j=i;j<=n;j++){
				if(a[j]!=k)tot++;
				f[k][tot]=Max(f[k][tot],j-i+1);
			}
			for(reg int i=1;i<=n;i++)f[k][i]=Max(f[k][i],f[k][i-1]);
		}
	for(reg int Q=read();Q;Q--){
		reg int m=read(),p=Gc()-'a'+1;
		Print(f[p][m]);
	}*/
	for(reg int Q=read();Q;Q--){
		reg int k=read(),p=Gc()-'a'+1,ans=0;
		reg int l=1,tot=0;
		for(reg int i=1;i<=n;i++){
			if(a[i]!=p)tot++;
			while(tot>k){tot-=(a[l]!=p);l++;}
//			printf("%d %d %d %c\n",l,i,tot,'a'+p-1);
			ans=Max(ans,i-l+1);
		}
		Print(ans);
	}
	#ifndef ONLINE_JUDGE
		fclose(stdin);fclose(stdout);
		system("C:/Users/Administrator/Desktop/out.txt");
	#endif
	return 0;
}
2020/6/5 20:43
加载中...