按题面给的数据范围,应该还不至于全部 MLE。
#include <iostream>
#include <algorithm>
#include <climits>
#include <cmath>
#include <limits>
#include <string>
#include <concepts>
using namespace std;
unsigned vgt[10];
// using u128 = __uint128_t;
using u128 = unsigned long long;
u128 ans;
void dfs(unsigned begin, u128 calculated, u128 remainder){
ans = min(ans, remainder+calculated);
unsigned Sz = log10((double)remainder)+1;
for (auto to = begin;to<Sz;to++){
auto useful = static_cast<u128>(pow(10U, to));
unsigned bt = remainder%(useful*10)/useful;
calculated += vgt[bt];
dfs(to, calculated, remainder%useful+remainder/(useful*10)*useful);
calculated -= vgt[bt];
}
}
void baddy(ostream& gok, __uint128_t gone){
using ex = numeric_limits<unsigned long long>;
using ext = numeric_limits<u128>;
if (gone <= ex::max()){
gok << static_cast<unsigned long long>(gone);
return;
}
gok << static_cast<unsigned long long>(gone/10000000000000000000ULL) << static_cast<unsigned long long>(gone%10000000000000000000ULL);
}
void baddy(ostream& gok, unsigned long long gone){
gok << gone;
}
template <class T = void>
requires same_as<u128, __uint128_t>
__uint128_t gocky(istream& inn){
constexpr unsigned mxz = numeric_limits<u128>::digits10;
string kx;
inn >> kx;
u128 rst{};
for (unsigned i=0;i<kx.size();i++){
rst *= 10;
rst += kx[i]-'0';
}
return rst;
}
template<class T = void>
requires same_as<u128, unsigned long long>
unsigned long long gocky(istream& inn){
unsigned long long xx;
inn >> xx;
return xx;
}
int main(){
unsigned c;
cin >> c;
unsigned t;
cin >> t;
for (auto i=0u;i<t;i++){
u128 v = gocky(cin);
//baddy(cout, v);
for (auto i=0u;i<9u;i++){
cin >> vgt[i+1];
}
ans = v;
dfs(0u, 0u, v);
baddy(cout, ans);
putc('\n', stdout);
}
}