#指针#[cometoj]夕日的光辉

题目

https://cometoj.com/contest/73/problem/B?problem_id=4115


解题思路

先特判是否有1-1的情况。
然后确定最左边,最右边的ppkk
再找到pp以后最早出现的ii
之后枚举区间内的nn以及顺便记录每个nn向前最近的ii
分别判断5种情况就可以了。


代码

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; 
int T,n,qi; char c[1000005]; 
int main(){
	scanf("%d",&T); 
	while(T--){
		scanf("%d\n",&n); 
	    scanf("%s",c); 
	    bool b1=0,b2=0,b3=0,b4=0; 
	    for(int i=0;i<n;i++) {
	    	if (!b1&&c[i]=='p') b1=1; 
	    	if (b1&&c[i]=='i') b2=1; 
	    	if (b2&&c[i]=='n') b3=1; 
	    	if (b3&&c[i]=='k') b4=1; 
	    }
	    if (!b4) {
	    	printf("-1\n"); 
	    	continue; 
	    }
	    
	    int l=0,r=n-1,ans=-1e9,dis; 
	    while (c[l]!='p') l++; 
	    while (c[r]!='k') r--; 
	    qi=l+1; 
	    while (c[qi]!='i') qi++; 
	    for(int i=qi;i<=r-1;i++){
	    	if (c[i]=='i') dis=i; 
	     	if (c[i]=='n'){
	     		ans=max(ans,max(qi-l-1,max(i-qi-1,max(r-i-1,max(dis-l-1,i-dis-1))))); 
	     	}	    	
	    }
	    printf("%d\n",ans); 
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章