大佬们为什么test 9会出现-19700....而test 8却没问题
查看原帖
大佬们为什么test 9会出现-19700....而test 8却没问题
1260256
zzjcompl楼主2024/9/18 21:25
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+500;
int jian(char a){
	if(a=='A')return 1;
	else if(a=='B')return 10;
	else if(a=='C')return 100;
	else if(a=='D')return 1000;
	else return 10000;
}
signed main(){
	int t;
	cin>>t;
	while(t--){
		string a;
		cin>>a;
		int n,i,j,z;
		n=a.size();
		vector<char>ma(n+10,0);
		vector<int>hz(n+10,0);
		vector<vector<int>>qqz(n+10,vector<int>(10,0));
		vector<vector<int>>qz(n+10,vector<int>(10,0));
		a=' '+a;
		char mm='A';
		for(i=n;i>=1;i--){
			int ss=jian(a[i]);
			if(a[i]<ma[i+1])
			{
			hz[i]=hz[i+1]-ss;
			ma[i]=ma[i+1];
		
				
			}
			else {
				hz[i]=hz[i+1]+ss;
				ma[i]=a[i];
				qz[i][a[i]-'A']=1; 
			}
			for(j=0;j<=4;j++)
			{qz[i][j]+=qz[i+1][j];
			//cout<<qz[i][j]<<' '<<char(j+'a')<<' '<<i<<endl;
			}
		}
		
		
		for(i=1;i<=n;i++){
			qqz[i][a[i]-'A']++;
			for(j=0;j<=4;j++)
			{qqz[i][j]+=qqz[i-1][j];
		//	cout<<qqz[i][j]<<' '<<char(j+'A')<<' '<<i<<endl;
			}
		}
		int ans=hz[1];
		
		for(i=1;i<=n;i++)
		{
			
			for(j=0;j<=4;j++)
			{
				char maa=ma[i+1];
				int anss=hz[i+1];
				if(j+'A'>=maa)
				anss+=jian(char(j+'A'));
				else anss-=jian(char(j+'A'));
				for(z=0;z<=4;z++){
				int gg=qz[1][z]-qz[i][z];
				int tt=qqz[i-1][z];
				
				if(z+'A'>=j+'A')anss+=((int)2*gg-tt)*jian(char(z+'A'));
				else anss-=tt*(jian(char(z+'A')));
				}
				//cout<<anss<<' '<<i<<' '<<j<<endl;
				ans=max(anss,ans);
			}
			//cout<<ans<<endl;
		}
		
		cout<<ans<<"\n";
	}
}
2024/9/18 21:25
加载中...