80pts but TLE(?
查看原帖
80pts but TLE(?
578004
02Ljh楼主2022/12/26 19:32

不理解 TLE on subtask 3

#include <bits/stdc++.h>
using namespace std;
#define INF 0x7fffffff
#define ll long long
#define MAXN 500019
#define WA puts("CCF\n");
#define eps 1e-5
int a[MAXN],b[MAXN];
int n;
vector<int> st,en;
void init()
{
    st.clear();
    en.clear();
    memset(b,1,sizeof(b));
    memset(a,0,sizeof(a));
}
int main()
{
    //freopen("P1536_1.in","r",stdin);
    //freopen("out.txt","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int _;
    cin>>_;
    while(_--)
    {
        init();
        cin>>n;
        int s=-1,e=-1;
        bool kd=true;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            if(a[i]!=-1) kd=false;
            b[i]=a[i]-a[i-1];
            if(a[i]==-1)
            {
                e=i;
                if(s==-1) s=i;
                //qz[i]=qz[i-1];
            }
            else
            {
                if(s!=-1||e!=-1)
                {
                    st.push_back(s);
                    en.push_back(e);
                    s=e=-1;
                }
                //qz[i]=qz[i-1]+a[i];
            }
        }
        if(kd)
        {
            for(int i=1;i<=n;i++) cout<<"19 ";
            continue;
        }
        int len=st.size();
        if(len==0)
        {
            for(int i=1;i<=n;i++)
            {
                cout<<a[i]-a[i-1]<<" ";
            }
            cout<<"\n";
            continue;
        }
        //for(int i=1;i<=n;i++) cout<<qz[i]<<" ";
        //puts("over");
        for(int i=0;i<len;i++)
        {
            int e=en[i],s=st[i];
            //cout<<s<<" "<<e<<"\n";
            int num=(a[e+1]-a[s-1]);
            //cout<<a[e+1]<<"-"<<qz[s-1]<<"\n";
            int mo=num%(e-s+2);
            //cout<<mo<<":"<<num<<"\n";
            int add=(num-mo)/(e-s+2);
            b[e+1]=add+mo;
            for(int i=s;i<=e;i++)
            {
                b[i]=add;
            }
        }
        for(int i=1;i<=n;i++)
        {
            cout<<(b[i]<=0?19:b[i])<<" ";
        }
        cout<<"\n";
    }
    return 0;
}
2022/12/26 19:32
加载中...