CF div2 C求调
  • 板块学术版
  • 楼主Wei_Han
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/1/28 01:04
  • 上次更新2024/1/28 10:11:22
查看原帖
CF div2 C求调
658884
Wei_Han楼主2024/1/28 01:04

疯了,自己测的小样例都能过

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
#define pr printf("\n")
#define pp printf(" ")
#define pii pair<ll,ll>
#define mem(aa,bb) memset(aa,bb,sizeof(aa))
#define fo(a,i,b) for(ll i = a ; i <= b ; i ++ )
#define Fo(a,i,b) for(ll i = a ; i >= b ;-- i  )
using namespace std;
typedef int ll;
typedef double db;
const int N=1e7+5;
inline void read(ll &opp){ll x=0,t=1;char ch;ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-'){t=-1;}ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}opp=x*t;return; }
inline void wr(ll x){if(x<0){putchar('-');x=-x;}if(x>9){wr(x/10);}putchar(x%10+'0');}

ll t,n,k,m;
string s,ss;
ll mp[30];
int main(){
	read(t);
	while(t--){
		read(n),read(k),read(m);
		s=ss;
		cin>>s;
		mem(mp,0);
		ll sum=0,start=0,m1=m;
		fo(1,i,k) s+=char('a'+i-1);
		m+=k;
		fo(0,i,m-1)
		{
			if(!mp[s[i]-'a'+1])
			{
				mp[s[i]-'a'+1]=1;
				sum++;
				
			}	
			if(sum==k){start=i;break;}
		}
		string s2;
		s2+=s[start];
		if(start>m1-1)
		{
			printf("NO\n");
			fo(1,i,n) cout<<s[start];
			if(t) pr;
			continue;
		}
		ll now=1,flag=0;
		sum=0;mem(mp,0);
//		cout<<s;pr;
		fo(start,i,m-1){
			if(now==n){
				printf("YES");
				break;
			}
			if(i>m1-1&&!mp[s[i]-'a'+1]){
//				wr(i);pr;
//				wr(n-s2.size());pr;
				flag=1;
				printf("NO\n");
				cout<<s2;
				fo(1,j,n-s2.size()) cout<<s[i];
				break;
			}
			if(!mp[s[i]-'a'+1]) mp[s[i]-'a'+1]=1,sum++;
			if(sum==k) now++,mem(mp,0),s2+=s[i],sum=0;
		}
		if(t) pr;
	}
	return 0;
}
2024/1/28 01:04
加载中...