WA求调
查看原帖
WA求调
763878
Jerry_heng楼主2023/10/28 23:01
#include<bits/stdc++.h>
#define int long long
using namespace std;
int pos,t;
bool vis[1000010];
char ch[1000010],ch2[1000010];
vector<int>v[26];
signed main(){
	scanf("%lld",&t);
	while(t--){
		memset(vis,0,sizeof vis);
		scanf("%s%lld",ch+1,&pos);
		int len=strlen(ch+1);
		if(pos<=len){
			printf("%c",ch[pos]);
			continue;
		}
		int cnt=0,cnt2=0;
		for(int i=len;i>=1;i--){
			if(pos<=i)break;
			cnt++;
			pos-=i;
		}
		for(int i=0;i<26;i++)v[i].clear();
		for(int i=1;i<=len;i++)
			v[ch[i]-'a'].push_back(i);
		int las=1,c=0;
		for(int i=0;i<26;i++){
			for(int p=0;p<v[i].size();p++){
				int j=v[i][p];
				if(las>=j){
					if(las==j)las=j+1;
					continue;
				}
				if(cnt<j-las)continue;
				cnt-=j-las;
				for(int k=las;k<j;k++)vis[k]=1;
				las=j+1;
			}
		}	
		for(int i=1;i<=len;i++)
			if(!vis[i])ch2[++cnt2]=ch[i];
		memset(vis,0,sizeof vis);
		for(int i=1;i<cnt2;i++){
			if(ch2[i]>ch2[i+1]&&cnt)cnt--,vis[i]=1;
		}
		for(int i=1;i<=cnt2;i++)
			if(!vis[i]){
				c++;
				if(c==pos){
					printf("%c",ch2[i]);
					break;
				}
			}
	}
	return 0;
}
2023/10/28 23:01
加载中...