Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38915 氩_wjy 【S】T1 C++ 通过 100 66 MS 484 KB 1409 2025-11-19 19:05:11

Tests(20/20):


#include<bits/stdc++.h> #define int long long using namespace std; const int N=4007; int n,b[N]; vector<int> MinOP(int x){ vector<int> ret(0); for(int i=1;i<=x/9;i++)ret.push_back(9); if(x%9)ret.push_back(x%9); return ret; } vector<int> Nxt(vector<int> Cur,int B){ int L=Cur.size(); if((L+1)*9<B)return MinOP(B); static int Suf[N],LB[N],RB[N]; static int ret[N]; LB[L]=1,RB[L]=(L+1)*9,Suf[L]=Suf[L+1]=0; vector<int> Not9;Not9.push_back(L); for(int i=L-1;i>=0;i--){ Suf[i]=Suf[i+1]+Cur[i]; if(Cur[i]!=9)LB[i]=Suf[i]+1,RB[i]=Suf[i+1]+(i+1)*9,Not9.push_back(i); } int P=0; while(P<Not9.size()-1&&LB[Not9[P+1]]<=B&&B<=RB[Not9[P+1]])P++; int Low=Not9[P]; for(int i=0;i<=L;i++)ret[i]=0; for(int i=Low+1;i<L;i++)ret[i]=Cur[i]; ret[Low]=(Low<L?Cur[Low]+1:1); int k=B-Suf[Low]-1; for(int i=0;i<=Low;i++){ int Up=min(9-ret[i],k); ret[i]+=Up; k-=Up; } vector<int> RRet; for(int i=0;i<L;i++)RRet.push_back(ret[i]); if(ret[L])RRet.push_back(ret[L]); return RRet; } inline void slv(){ cin>>n; for(int i=1;i<=n;i++)cin>>b[i]; vector<int> Cur=MinOP(b[1]); for(int i=2;i<=n;i++)Cur=Nxt(Cur,b[i]); for(int i=Cur.size()-1;i>=0;i--)cout<<Cur[i]; cout<<endl; } signed main(){ int T;cin>>T; while(T--)slv(); }


测评信息: