QOJ.ac

QOJ

ID提交记录ID题目HackerOwner结果提交时间测评时间
#1322#838782#9920. Money Game 2AfterlifeAfterlifeSuccess!2024-12-31 22:16:232024-12-31 22:16:23

详细

Extra Test:

Wrong Answer
time: 637ms
memory: 294544kb

input:

1
499876
120565056 411601923 149422392 697760187 354514718 497073787 251894819 136625101 529953679 559816997 353458912 252313469 67912463 284002632 700882124 354777502 370298325 495558623 310889604 579701705 389785604 230244009 381623512 465580348 335581662 265053390 334606942 431782282 554570164 51...

output:

BAD
819233709 974846392 1000479387 1302218488 1208426553 1187075818 1013652311 969212732 1204441867 1246961418 1073236182 905940669 813145287 1025053854 1323485401 1232336462 1225189502 1275189805 1219447076 1307093480 1178734067 1055063281 1113558123 1156396758 1079063250 1037888874 1118078850 1255...

result:

wrong output format Expected integer, but "BAD" found

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#838782#9920. Money Game 2AfterlifeWA 629ms294916kbC++172.1kb2024-12-31 22:14:482024-12-31 22:32:16

answer

#include<bits/stdc++.h>
using namespace std;
 
using pii=pair<int,int>;
 
const int N=5e5+1e3+7;
 
int T,n,a[N];
 
vector<pii> L[N],R[N];
 
int chk(int a,int b,int c,int d)
{
    if(a>b)
        return chk(a,n-1,c,d)&&chk(0,b,c,d);
    if(c>d)
        return chk(a,b,c,n-1)&&chk(a,b,0,d);
    return a>d||c>b;
}
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>T;
    while(T--)
    {
        cin>>n;
		if(n==499876)cout<<"BAD"<<endl;
        for(int i=0;i<n;i++)
            cin>>a[i],L[i].clear(),R[i].clear();
        if(n==1)
        {
            cout<<a[0]<<"\n";
            continue;
        }
        for(int r=0;r<n*2;r++)
        {
            int i=r%n;
            auto tmp=L[(i+n-1)%n];
            if(tmp.size()&&tmp.begin()->second==i)
                tmp.erase(tmp.begin());
            tmp.push_back({0,i});
            L[i].clear();
            reverse(tmp.begin(),tmp.end());
            for(auto [x,y]:tmp)
            {
                if(!L[i].size()||x/2+a[i]!=L[i].back().first)
                    L[i].push_back({x/2+a[i],y});
            }
            reverse(L[i].begin(),L[i].end());
        }
        for(int r=n*2-1;r>=0;r--)
        {
            int i=r%n;
            auto tmp=R[(i+1)%n];
            if(tmp.size()&&tmp.begin()->second==i)
                tmp.erase(tmp.begin());
            tmp.push_back({0,i});
            R[i].clear();
            reverse(tmp.begin(),tmp.end());
            for(auto [x,y]:tmp)
            {
                if(!R[i].size()||x/2+a[i]!=R[i].back().first)
                    R[i].push_back({x/2+a[i],y});
            }
            reverse(R[i].begin(),R[i].end());
        }
        for(int i=0;i<n;i++)
        {
        	long long ans=0;
            ans=max(ans,1ll*R[i][0].first);
            for(int j=0,k=(int)R[i].size()-1;j+1<L[i].size();j++)
            {
                while(k>0&&chk(L[i][j].second,(i+n-1)%n,(i+1)%n,R[i][k-1].second))
                    k--;
                ans=max(ans,1ll*R[i][k].first+L[i][j].first-a[i]);
            }
        	cout<<ans<<" \n"[i+1==n];
        }
    }
}