why MLE
查看原帖
why MLE
315554
lusers楼主2024/10/13 19:02

按题面给的数据范围,应该还不至于全部 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);
	}
}

https://www.luogu.com.cn/record/181940701

2024/10/13 19:02
加载中...