Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
232096857 Дорешивание:
B_Consistent
1848D - 28 C++20 (GCC 11-64) Неправильный ответ на тесте 7 124 мс 12 КБ 2023-11-09 19:00:27 2023-11-09 19:00:27
→ Исходный код
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
// #include <atcoder/all>
// using namespace atcoder;
using namespace __gnu_pbds;
using namespace std;
using ll = long long;
using u32 = unsigned int;
using u64 = unsigned long long;
using i128 = __int128;
using ld = long double;
using vb = std::vector<bool>;
using vvb = std::vector<vb>;
using vc = std::vector<char>;
using vvc = std::vector<vc>;
using vi = std::vector<int>;
using vvi = std::vector<vi>;
using vvvi = std::vector<vvi>;
using vll = std::vector<ll>;
using vvll = std::vector<vll>;
using vvvll = std::vector<vvll>;
using vld = std::vector<ld>;
using vvld = std::vector<vld>;
using vvvld = std::vector<vvld>;
using pll = std::array<ll, 2>;
using vpll = std::vector<pll>;
using vvpll = std::vector<vpll>;
using pii = std::array<int, 2>;
using vpii = std::vector<pii>;
using vvpii = std::vector<vpii>;
using vs = std::vector<std::string>;
using vvs = std::vector<vs>;

template<class W>
using ordered_set = tree<W, null_type, std::less<W>, rb_tree_tag,
	tree_order_statistics_node_update>;
// find_by_order(k)  returns iterator to kth element starting from 0;
// order_of_key(k) returns count of elements strictly smaller than k;

auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();
std::mt19937 rng(seed);
#define ff(i,a,b)  for(int i=a;i<(int)(b);i++)
#define fb(i,b,a)  for(int i=(int)(b);i>=(int)(a);i--)
#define siz(x) (ll) x.size()
#define all(v) (v).begin(), (v).end()
#define RASENGAN  ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define UNIQUE(x) sort(all(x)), x.erase(unique(all(x)), x.end());
#ifdef DEBUG
#include "dbg.hpp"
#else
#define err(...)
#define deb(...)
#endif

const ld EPS = 1e-9;
//const ll maxN = 5;
const ll maxN = 1e5 + 5;
const ll INF64 = 1e18 + 5;
const int INF32 = 1e9 + 5;
const ll mod = 1e9 + 7;


template<class Fun>
class y_combinator_result {
	Fun fun_;
public:
	template<class T>
	explicit y_combinator_result(T&& fun) : fun_(std::forward<T>(fun)) {}

	template<class ...Args>
	decltype(auto) operator()(Args &&...args) {
		return fun_(std::ref(*this), std::forward<Args>(args)...);
	}
};
template<class Fun>
decltype(auto) y_combinator(Fun&& fun) {
	return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));
}
// auto gcd = std::y_combinator([](auto gcd, int a, int b) -> int {
//     return b == 0 ? a : gcd(b, a % b);
// });
template <typename T>
int lb(const vector<T>& v, T x) {
	return lower_bound(begin(v), end(v), x) - begin(v);
}

template <typename T>
int ub(const vector<T>& v, T x) {
	return upper_bound(begin(v), end(v), x) - begin(v);
}

template <typename T>
T floor(T x, T y) {
	assert(y != 0);
	if (y < 0) x = -x, y = -y;
	return (x >= 0 ? x / y : (x - y + 1) / y);
}

template <typename T>
T ceil(T x, T y) {
	assert(y != 0);
	if (y < 0) x = -x, y = -y;
	return (x >= 0 ? (x + y - 1) / y : x / y);
}

template<class T>
inline bool chmax(T& a, T b) {
	if (a < b) {
		a = b;
		return true;
	}
	return false;
}

template<class T>
inline bool chmin(T& a, T b) {
	if (a > b) {
		a = b;
		return true;
	}
	return false;
}
ll binpow(ll x, ll y, ll p) {
	ll result = 1;
	for (; y; y >>= 1, x = x * x % p) {
		if (y & 1) {
			result = result * x % p;
		}
	}
	return result;
}

ll pow(ll x, ll y) {
	ll res = 1;
	for (; y; y >>= 1, x = x * x) {
		if (y & 1) {
			res = res * x;
		}
	}
	return res;
}

long long inverse(long long x, long long p) {
	return binpow(x, p - 2, p);
}
//<------------------------------------------------------------------------------------------------------------>
template <int MOD_> struct modnum {
	static constexpr int MOD = MOD_;
	static_assert(MOD_ > 0, "MOD must be positive");
	int v;
private:
	using ll = long long;



	static int minv(int a, int m) {
		a %= m;
		assert(a);
		return a == 1 ? 1 : int(m - ll(minv(m, a)) * ll(m) / a);
	}

public:

	modnum() : v(0) {}
	modnum(ll v_) : v(int(v_% MOD)) { if (v < 0) v += MOD; }
	explicit operator int() const { return v; }
	friend std::ostream& operator << (std::ostream& out, const modnum& n) { return out << int(n); }
	friend std::istream& operator >> (std::istream& in, modnum& n) { ll v_; in >> v_; n = modnum(v_); return in; }

	friend bool operator == (const modnum& a, const modnum& b) { return a.v == b.v; }
	friend bool operator != (const modnum& a, const modnum& b) { return a.v != b.v; }

	modnum inv() const {
		modnum res;
		res.v = minv(v, MOD);
		return res;
	}
	friend modnum inv(const modnum& m) { return m.inv(); }
	modnum neg() const {
		modnum res;
		res.v = v ? MOD - v : 0;
		return res;
	}
	friend modnum neg(const modnum& m) { return m.neg(); }

	modnum operator- () const {
		return neg();
	}
	modnum operator+ () const {
		return modnum(*this);
	}

	modnum& operator ++ () {
		v++;
		if (v == MOD) v = 0;
		return *this;
	}
	modnum& operator -- () {
		if (v == 0) v = MOD;
		v--;
		return *this;
	}
	modnum& operator += (const modnum& o) {
		v += o.v;
		if (v >= MOD) v -= MOD;
		return *this;
	}
	modnum& operator -= (const modnum& o) {
		v -= o.v;
		if (v < 0) v += MOD;
		return *this;
	}
	modnum& operator *= (const modnum& o) {
		v = int(ll(v) * ll(o.v) % MOD);
		return *this;
	}
	modnum& operator /= (const modnum& o) {
		return *this *= o.inv();
	}

	friend modnum operator ++ (modnum& a, int) { modnum r = a; ++a; return r; }
	friend modnum operator -- (modnum& a, int) { modnum r = a; --a; return r; }
	friend modnum operator + (const modnum& a, const modnum& b) { return modnum(a) += b; }
	friend modnum operator - (const modnum& a, const modnum& b) { return modnum(a) -= b; }
	friend modnum operator * (const modnum& a, const modnum& b) { return modnum(a) *= b; }
	friend modnum operator / (const modnum& a, const modnum& b) { return modnum(a) /= b; }
};

template <typename T> T pow(T a, long long b) {
	assert(b >= 0);
	T r = 1; while (b) { if (b & 1) r *= a; b >>= 1; a *= a; } return r;
}

using num = modnum<mod>;
using vnum = vector<num>;
using vvnum = vector<vnum>;
using vvvnum = vector<vvnum>;
vector<num> fact, ifact;

void init_f() {
	int N = 1100000;
	fact = { 1 };
	for (int i = 1; i < N; i++) fact.push_back(i * fact[i - 1]);
	ifact.resize(N);
	ifact.back() = 1 / fact.back();
	for (int i = N - 1; i > 0; i--) ifact[i - 1] = i * ifact[i];
}

num ncr(int n, int k) {
	if (k < 0 || k > n) return 0;
	return fact[n] * ifact[k] * ifact[n - k];
}

num npr(int a, int b) {
	if (a < 0 || b < 0 || a < b)return 0;
	return fact[a] * ifact[a - b];
}
void solve()
{

	ll s, n;
	cin >> s >> n;

	ll ans = s * n;
	s += s % 10;
	n--;

	
	chmax(ans, s * n);
	if (s % 10 == 0) {
		cout << ans << "\n";
		return;
	}



	//(s+20*k)(n-4*k)
	// (s + 20k)(n - 4k) = sn + (20n-4s)k - 80kk
	ff(j, 0, 100) {
		if (n <= 0)break;
		chmax(ans, s * n);
		ll x = (5 * n - s) / 40;
		ff(i, max(0ll, x - 3), min(n + 1, x + 3)) {
			ll ss = s + 20 * i * 1ll;
			ll nn = n - 4ll * i;
			if (nn < 0 || ss < 0)break;
			chmax(ans, ss * nn);
		}
		s += s % 10;
		n--;
	}
	cout << ans << "\n";
}
int main()
{
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	RASENGAN
		int t = 1;
	cout << fixed << setprecision(12);
	cin >> t;
	//init_f();
	for (int i = 1; i <= t; i++)
	{
		// cout << "Case #" << i << ": ";
		solve();
	}
	return 0;
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования