62pts玄关求调
查看原帖
62pts玄关求调
572286
feng_zi_xuan楼主2025/2/8 09:47
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,a[1000010],sum[1000010],l,r,now,first1,last1,ans,ou,ji;
map<int,pair<int,int> >ma;
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		char ch;
		cin>>ch;
		if(ch=='T') a[i]=2;
		else a[i]=1,last1=i;
		if(!first1&&a[i]==1) first1=i;
		sum[i]=sum[i-1]+a[i];
	}
	//cout<<first1<<' '<<last1<<endl;
	if(sum[n]%2==0)
	{
		ou=sum[n];
		ji=max(sum[n]-sum[first1],sum[last1-1]);
		//cout<<sum[n]-sum[first1]<<' '<<sum[last1-1]<<endl;
		ma[ou]={1,n};
		if(n-first1>last1-1) ma[ji]={first1+1,n};
		else ma[ji]={1,last1-1};
	}
	else
	{
		ji=sum[n];
		ou=max(sum[n]-sum[first1],sum[last1-1]);
		ma[ji]={1,n};
		if(n-first1>last1-1) ma[ou]={first1+1,n};
		else ma[ou]={1,last1-1};
	}
	//cout<<ou<<' '<<ji<<endl;
	//oushu
	l=ma[ou].first;
	r=ma[ou].second;
	now=ou;
	while(l<=r&&now>=3)
	{
		now-=2;
		if(a[l]==1&&a[r]==1)
		{
			l++;
			r--;
			ma[now]={l,r};
		}
		else if(a[l]==1&&a[r]==2)
		{
			r--;
			ma[now]={l,r};
		}
		else
		{
			l++;
			ma[now]={l,r};
		}
	}
	//jishu
	l=ma[ji].first;
	r=ma[ji].second;
	now=ji;
	while(l<=r&&now>=3)
	{
		now-=2;
		if(a[l]==1&&a[r]==1)
		{
			l++;
			r--;
			ma[now]={l,r};
		}
		else if(a[l]==1&&a[r]==2)
		{
			r--;
			ma[now]={l,r};
		}
		else
		{
			l++;
			ma[now]={l,r};
		}
	}
	while(q--)
	{
		int k;
		cin>>k;
		if(ma[k].first==0&&ma[k].second==0) cout<<"NIE\n";
		else cout<<ma[k].first<<' '<<ma[k].second<<endl;
	}
	
	return 0;
}

TLE on17,30-41
不知道为什么TLE

2025/2/8 09:47
加载中...