说实话,这道题卡的最久的就是一直在由于1s钟这种暴力会不会超时的问题,还是不太自信,这个题既想走的路径短,又想走的步数最多,那就按着字母顺序走呗。

以logic为例

在字母表中的顺序是这样的 c g i l,所以要想从l走到c路径最短且步数最多,就是l->i->g->c,知道这点之后,这道题就容易了。

#include<bits/stdc++.h>
using namespace std;
const int M=2e5+5;
struct node{
	int val;
	int pos;
	node(int a,int b){
		val=a; pos=b;
	}
	node(){
	}
	bool operator<(const node&p) const{
		return val<p.val;
	}
}ans[M]; 
int a[M];
int main(){
    int t; cin>>t;
    while(t--){
    	string s; cin>>s;
    	int n=s.size();
    	for(int i=1;i<=s.size();i++){
    		a[i]=s[i-1]-'0';
		}
		if(a[1]>a[n]){
			for(int i=1;i<=n;i++){
				a[i]=-a[i];
			}
		}
		int tot=0;
		for(int i=2;i<n;i++){
			if(a[i]>=a[1]&&a[i]<=a[n]){
				ans[++tot].val=a[i];
				ans[tot].pos=i;
			} 
		}
		sort(ans+1,ans+1+tot);
		cout<<abs(a[1]-a[n])<<" "<<tot+2<<endl;
		cout<<"1"<<" ";
		for(int i=1;i<=tot;i++){
			cout<<ans[i].pos<<" ";
		}
		cout<<n<<endl;
	}
	return 0;
}