牛客小白月赛 68 题解

发布时间 2023-03-22 21:13:05作者: Transitivity6

网址:https://ac.nowcoder.com/acm/contest/51958

A - Tokitsukaze and New Operation

先将 \(a,b\) 的每一位分解,如果位数不一样直接 \(-1\)

\(a,b\)\(n\) 位,\(a\) 的第 \(i\)\(x_i\) & \(b\) 的地 \(i\)\(y_i\)

那么就不带空格的输出 \(x_1y_1\) & \(x_2y_2\) & \(\dots\) & \(x_ny_n\)

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif
typedef long long ll;
typedef pair < int, int > PII;
typedef int itn;
mt19937 RND_MAKER (chrono :: steady_clock :: now ().time_since_epoch ().count ());
inline ll randomly (const ll l, const ll r) {return (RND_MAKER () ^ (1ull << 63)) % (r - l + 1) + l;}
//#define int long long
const double pi = acos (-1);
//__gnu_pbds :: tree < Key, Mapped, Cmp_Fn = std :: less < Key >, Tag = rb_tree_tag, Node_Upadte = null_tree_node_update, Allocator = std :: allocator < char > > ;
//__gnu_pbds :: tree < PPS, __gnu_pbds :: null_type, less < PPS >, __gnu_pbds :: rb_tree_tag, __gnu_pbds :: tree_order_statistics_node_update > tr;
signed main () {
	int _;
	scanf ("%d", &_);
	while (_ --) {
		int a, b;
		scanf ("%d %d", &a, &b);
		string S = "", T = "";
		while (a) {
			S += (char) (a % 10 + '0');
			a /= 10;
		}
		reverse (S.begin (), S.end ());
		while (b) {
			T += (char) (b % 10 + '0');
			b /= 10;
		}
		reverse (T.begin (), T.end ());
		if (S.size () != T.size ()) printf ("-1\n");
		else {
			for (int i = 0;i < T.size (); ++ i) {
				int a = S[i] - '0', b = T[i] - '0';
				printf ("%d", a * b);
			}
			printf ("\n");
		}
	}
	return 0;
}

B - Tokitsukaze and Order Food Delivery

如果在第 \(i\) 家吃饭,就枚举点哪一道菜,剩下的计算价格就是模拟了,注意答案一定是非负的。

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif
typedef long long ll;
typedef pair < int, int > PII;
typedef int itn;
mt19937 RND_MAKER (chrono :: steady_clock :: now ().time_since_epoch ().count ());
inline ll randomly (const ll l, const ll r) {return (RND_MAKER () ^ (1ull << 63)) % (r - l + 1) + l;}
#define int long long
const double pi = acos (-1);
//__gnu_pbds :: tree < Key, Mapped, Cmp_Fn = std :: less < Key >, Tag = rb_tree_tag, Node_Upadte = null_tree_node_update, Allocator = std :: allocator < char > > ;
//__gnu_pbds :: tree < PPS, __gnu_pbds :: null_type, less < PPS >, __gnu_pbds :: rb_tree_tag, __gnu_pbds :: tree_order_statistics_node_update > tr;
int _, n, a, b, k[100005], x[100005], y[100005], v[100005];
signed main () {
	scanf ("%lld", &_);
	while (_ --) {
		scanf ("%lld %lld %lld", &n, &a, &b);
		int res = 1e18;
		for (int i = 1;i <= n; ++ i) {
			scanf ("%lld %lld %lld", &k[i], &x[i], &y[i]);
			for (int j = 1;j <= k[i]; ++ j) scanf ("%lld", &v[j]);
			int ans = 1e18;
			for (int j = 1;j <= k[i]; ++ j) {
				int qwq = v[j];
				if (qwq >= a && qwq >= x[i]) qwq -= b, qwq -= y[i], qwq = qwq < 0 ? 0 : qwq;
				else if (qwq >= a && qwq < x[i]) qwq -= b, qwq = qwq < 0 ? 0 : qwq;
				else if (qwq < a && qwq >= x[i]) qwq -= y[i], qwq = qwq < 0 ? 0 : qwq;
				ans = min (ans, qwq); 
			}
			res = min (res, ans);
		}
		printf ("%lld\n", res);
	}
	return 0;
}