#指針#[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); 
	}
}

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