求助玄学MLE,TLE
查看原帖
求助玄学MLE,TLE
229008
yshpdyt楼主2023/10/23 20:18

rt,同一份代码每次提交都MLE或TLE不同的点

#include<bits/stdc++.h>
#include<bits/extc++.h>
#define ll long long
#define N 100005
#define endl "\n" 
#define fi first
#define se second
using namespace std;
const ll mod=1e9+7;
string s;
ll n;
ll hsh[N];
ll has1[N],has2[N],now1,a[N];
map<ll,vector<ll> >v;
stack<ll> q;
void sol(ll l,ll r){
    if(r<l)return;
    ll t1=(hsh[l-1]+s[l]-'a'+1);
    a[l]=1;
    ll t2=(*--upper_bound(v[t1].begin(),v[t1].end(),r));
    a[t2]=2;
    sol(l+1,t2-1);
    sol(t2+1,r);
}
int main(){
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    cin>>s;
    n=s.size();
    s=" "+s;
    srand(time(0));
    for(int i=1;i<=n;i++){
        has1[i]=rand()%1000;
        has2[i]=rand()%2000;
    }
    v[0].push_back(0);
    hsh[0]=0;
    for(int i=1;i<=n;i++){
        ll t=s[i]-'a'+1;
        if(!q.empty()&&q.top()==t){
            ll p=q.size();
            q.pop();
            now1-=(has1[p]*t)*(has2[p]*t);
        }else{
            q.push(t);
            ll p=q.size();
            now1+=(has1[p]*t)*(has2[p]*t);
        }
        hsh[i]=now1;
        v[(now1+t)].push_back(i);
    }
    if(!q.empty()){
        cout<<"-1";
        return 0;
    }
    sol(1,n);
    for(int i=1;i<=n;i++){
        cout<<(a[i]==1?"(":")");
    }
    return 0;
}
2023/10/23 20:18
加载中...