一个 checker
查看原帖
一个 checker
1068414
pystraf11楼主2025/6/29 12:06
#include <bits/stdc++.h>
using namespace std;

using i64 = long long;
using ui64 = unsigned long long;
using i128 = __int128;
using ui128 = unsigned __int128;
using f4 = float;
using f8 = double;
using f16 = long double;

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

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

constexpr int m = 998244353, M = 1000000007, T = 100;

inline int test() {
	vector<ui64> reg(26, 0);
	auto var = [&](char c) -> ui64& { return reg[c - 'A']; };
	auto add = [&](ui64& x, ui64 y, ui64 z) { x = y + z; };
	auto mul = [&](ui64& x, ui64 y, ui64 z) { x = y * z; };
	auto rem = [&](ui64& x, ui64 y) { x = y % m; };
	
	random_device dev;
	mt19937 rnd; rnd.seed(dev());
	uniform_int_distribution gen(0, M - 1);
	reg[0] = gen(rnd), reg[1] = gen(rnd);
	
	ui64 expect = reg[0] * reg[1] % M;
	cout << "Expected: " << reg[0] << " * " << reg[1] << " mod " << M << " = " << expect << endl;
	
	int n;
	cin >> n;
	
	for (int i = 0; i < n; i++) {
		string op;
		char x, y;
		cin >> op >> x >> y;
		
		if (op == "rem") rem(var(x), var(y));
		if (op == "add") {
			string z;
			cin >> z;
			if (z.size() == 1 && isupper(z[0])) add(var(x), var(y), var(z[0]));
			else {
				ui64 v = strtoull(z.c_str(), nullptr, 0);
				add(var(x), var(y), v);
			} 
		}
		if (op == "mul") {
			string z;
			cin >> z;
			if (z.size() == 1 && isupper(z[0])) mul(var(x), var(y), var(z[0]));
			else {
				ui64 v = strtoull(z.c_str(), nullptr, 0);
				mul(var(x), var(y), v);
			} 
		}
	}
	
	cout << "result = " << reg[2] << endl;
	cout << (reg[2] == expect ? "Accepted!" : "Wrong Answer!") << endl;
	cout << endl;
    return reg[2] == expect;
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	
	int n;
	cin >> n;
	if (n > 100) {
		cout << "Too long" << endl;
		return 0;
	}
	
	int res = 0;
	for (int i = 0; i < T; i++) {
		cout << i + 1 << "-th test : ";
		cin.seekg(0L, ios::beg);
		res += test();
	}
	cout << "Total : " << res << " / " << T << endl;
	
	return 0;
}

这是一个 checker,将你编写的指令(需按照题目给出的格式)输入到 checker,checker 就会进行 100 轮测试,并在最后输出 正确的次数 / 100

2025/6/29 12:06
加载中...