QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#573293#9319. Bull FarmTheRedStoneTL 137ms35620kbC++209.6kb2024-09-18 18:04:052024-09-18 18:04:06

Judging History

你现在查看的是最新测评结果

  • [2024-09-18 18:04:06]
  • 评测
  • 测评结果:TL
  • 用时:137ms
  • 内存:35620kb
  • [2024-09-18 18:04:05]
  • 提交

answer

#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <algorithm>
#include <map>
#include <unordered_map>
#include <bitset>
#include <set>
#include <queue>
#include <stack>
#include <random>
#include <numeric>
#include <cmath>
#include <utility>
#include <string>
#include <iomanip>
#include <functional>
#define FOR(i, s, e, t) for((i) = (s); (i) <= (e); (i) += (t))
#define ROF(i, s, e, t) for((i) = (e); (i) >= (s); (i) -= (t))
#define REP(s, e) for(long long i = (s); i <= (e); ++i)
#define PER(s, e) for(long long i = (e); i >= (s); --i)
#define ALL(x) (x).begin(), (x).end()
#define LLA(x) (x).rbegin(), (x).rend()
#define SIZE(x) ((int)(x).size())
#define AMONGlr(x, l, r) ((x) >= (l) && (x) <= (r))
#define AMONG(x, l, r) ((x) > (l) && (x) < (r))
#define AMONGl(x, l, r) ((x) >= (l) && (x) < (r))
#define AMONGr(x, l, r) ((x) > (l) && (x) <= (r))
#define pb push_back
#define qb pop_back
#define eb emplace_back
#define fi first
#define se second
#define maxe max_element
#define mine min_element
#define mp make_pair
#define upb upper_bound
#define lowb lower_bound
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
typedef pair<string, string> pss;
typedef pair<string, ll> psl;
typedef pair<ll, string> pls;
typedef pair<string, double> psd;
typedef pair<double, string> pds;
typedef pair<ll, double> pld;
typedef pair<double, ll> pdl;
typedef pair<char, ll> pcl;
typedef pair<ll, char> plc;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<pdd> vpdd;
typedef vector<pss> vpss;
typedef vector<psl> vpsl;
typedef vector<pls> vpls;
typedef vector<psd> vpsd;
typedef vector<pds> vpds;
typedef vector<pld> vpld;
typedef vector<pdl> vpdl;
typedef vector<pcl> vpcl;
typedef vector<plc> vplc;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef vector<vb> vvb;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<char> vc;
typedef vector<vc> vvc;
typedef vector<string> vs;
typedef vector<vs> vvs;
template<typename T> bool ckMax(T& a, const T& b) { return a < b ? a = b, true : false; }
template<typename T> bool ckMin(T& a, const T& b) { return a > b ? a = b, true : false; }
inline ll read() {
	ll x = 0;
	short flag = 1;
	char c = getchar();
	while (c < '0' || c > '9') {
		if (c == '-')flag = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		x = (x << 3) + (x << 1) + (c ^ 48);
		c = getchar();
	}
	return x * flag;
}
inline void write(ll x, char end = '\0') {
	if (x < 0) {
		putchar('-');
		x = -x;
	}
	if (x > 9)
		write(x / 10);
	putchar(x % 10 + '0');
	if (end != '\0') putchar(end);
}
template<ll P>
struct MInt {
	ll x;
	inline static ll Mod = 1e9 + 7;

	constexpr MInt() : x{ 0 } {}
	constexpr MInt(ll x) : x{ norm(x % getMod()) } {}

	constexpr static ll getMod() {
		if (P > 0) return P;
		return Mod;
	}
	constexpr static MInt power(MInt a, ll b) {
		MInt res(1);
		while (b > 0) {
			if (b % 2) res *= a;
			a *= a;
			b /= 2;
		}
		return res;
	}
	constexpr static void setMod(ll Mod_) {
		Mod = Mod_;
	}
	constexpr ll norm(ll x) const {
		if (x < 0) x += getMod();
		else if (x >= getMod()) x -= getMod();
		return x;
	}
	constexpr ll val() const {
		return x;
	}
	constexpr MInt inv() const {
		return power(*this, getMod() - 2);
	}
	constexpr MInt operator-() const {
		MInt res;
		res.x = norm(getMod() - x);
		return res;
	}
	constexpr MInt& operator*=(MInt other)& {
		if (getMod() < (1ULL << 31)) x = x * other.x % int(getMod());
		else {
			x = x * other.x - ll(1.L * x * other.x / getMod()) * getMod();
			x = norm(x % getMod());
		}
		return *this;
	}
	constexpr MInt& operator+=(MInt other)& {
		x = norm(x + other.x);
		return *this;
	}
	constexpr MInt& operator-=(MInt other)& {
		x = norm(x - other.x);
		return *this;
	}
	constexpr MInt& operator/=(MInt other)& {
		return *this *= other.inv();
	}
	friend constexpr MInt operator*(MInt a, MInt b) {
		a *= b;
		return a;
	}
	friend constexpr MInt operator+(MInt a, MInt b) {
		a += b;
		return a;
	}
	friend constexpr MInt operator-(MInt a, MInt b) {
		a -= b;
		return a;
	}
	friend constexpr MInt operator/(MInt a, MInt b) {
		a /= b;
		return a;
	}
	friend constexpr istream& operator>>(istream& stream, MInt& a) {
		ll v;
		stream >> v;
		a = MInt(v);
		return stream;
	}
	friend constexpr ostream& operator<<(ostream& stream, const MInt& a) {
		return stream << a.val();
	}
	friend constexpr bool operator==(MInt a, MInt b) {
		return a.val() == b.val();
	}
	friend constexpr bool operator!=(MInt a, MInt b) {
		return a.val() != b.val();
	}
	friend constexpr bool operator<(MInt a, MInt b) {
		return a.val() < b.val();
	}
	friend constexpr bool operator>(MInt a, MInt b) {
		return a.val() > b.val();
	}
	friend constexpr bool operator<=(MInt a, MInt b) {
		return a.val() <= b.val();
	}
	friend constexpr bool operator>=(MInt a, MInt b) {
		return a.val() >= b.val();
	}
};
namespace NumberTheory {
	using T = ll;
	//必要时改成__int128

	inline ll RandInt(ll l, ll r) {
		static mt19937 rd(random_device{}());
		return uniform_int_distribution<ll>(l, r)(rd);
	}
	inline ll Mul(T a, T b, T mod) {
		T res = a * b - (T)((long double)a * b / mod + 0.5) * mod;
		return res < 0 ? res + mod : res;
	}
	inline ll Plus(ll a, ll b, ll mod) { return a + b >= mod ? a + b - mod : a + b; }
	inline ll Sub(ll a, ll b, ll mod) { return a - b < 0 ? a - b + mod : a - b; }
	T Pow(T base, T x, T mod = 0) {
		T back = 1;
		while (x > 0) {
			if (x & 1)
				if (mod) back = back * base % mod;
				else back *= base;
			if (mod) base = base * base % mod;
			else base *= base;
			x >>= 1;
		}
		if (mod) return back % mod;
		return back;
	}
	bool MillerRabin(ll n) {
		static const int TIMES = 7;
		static const int TEST[7] = { 2,3,5,7,11,13,17 };
		if (n <= 1 || n % 2 == 0 && n > 2) return false;
		else if (n <= 3) return true;

		ll t = n - 1, k = 0, i, j;
		while (!(t & 1)) t >>= 1, k += 1;
		FOR(i, 0, TIMES - 1, 1) {
			if (n == TEST[i]) return true;
			ll a = Pow(TEST[i], t, n), nxt = a;
			FOR(j, 1, k, 1) {
				nxt = Mul(a, a, n);
				if (nxt == 1 && a != 1 && a != n - 1) return false;
				a = nxt;
			}
			if (a != 1) return false;
		}
		return true;
	}
	ll PollardRho(ll n) {
		ll x, y, z, c, g, i, j;
		while (true) {
			y = x = RandInt(0, n - 1);
			z = 1;
			c = RandInt(0, n - 1);
			i = 0, j = 1;
			while (++i) {
				x = Plus(Mul(x, x, n), c, n);
				z = Mul(z, abs(x - y), n);
				if (x == y || !z) break;
				if (!(i % 127) || i == j) {
					g = gcd(z, n);
					if (g > 1) return g;
					if (i == j) y = x, i = 0, j <<= 1;
				}
			}
		}
	}
	vl GetPrimFactors(ll n) {
		vl res;
		if (n == 1) return res;
		auto dfs = [&](auto&& self, ll x) {
			if (MillerRabin(x)) return res.pb(x);
			ll y = PollardRho(x);
			self(self, x / y);
			self(self, y);
		};
		dfs(dfs, n);
		return res;
	}
	struct C {
		static const ll N = 2e5;
		const ll MOD = 1e9 + 7;
		ll mults[N], invs[N];
		void init() {
			mults[0] = 1;
			REP(1, N - 1) mults[i] = Mul(mults[i - 1], i, MOD);
			invs[N - 1] = Pow(mults[N - 1], MOD - 2, MOD);
			PER(0, N - 2) invs[i] = Mul(invs[i + 1], i + 1, MOD);
		}
		inline ll calV(ll n, ll m) {
			if (m > n || n < 0 || m < 0) return 0;
			else if (m == 0 || m == n) return 1;
			return Mul(Mul(mults[n], invs[n - m], MOD), invs[m], MOD);
		}
	};
}
int __init__ = []() {
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	return 0;
}();
const ll N = 2e3 + 10, INF = 1e16;
ll line[N], linkRect[N][N], que[N][N * 2], queHead[N], tmp[N];
ll fa[N], siz[N], tags[N], tag = 1;
vpll edges[N];
ll n, q, l, i, j;
ll find(ll x) {
	if(fa[x] == x) return x;
	return fa[x] = find(fa[x]);
}
bool concat(ll a, ll b) {
	a = find(a);
	b = find(b);
	if(a == b) return false;
	if(siz[a] < siz[b]) swap(a, b);
	siz[a] += siz[b];
	fa[b] = a;
	return true;
}
ll readLine() {
	ll i;
	string reader;
	cin >> reader;
	FOR(i, 0, SIZE(reader) - 1, 2)
		line[i / 2 + 1] = (reader[i] - 48) * 50 + reader[i + 1] - 48;
	return SIZE(reader) / 2;
}
void bfs(ll s) {
	tag += 1;
	linkRect[s][s] = 0;
	REP(0, n) queHead[i] = 0;
	que[0][++queHead[0]] = s;
	FOR(i, 0, l, 1) {
		FOR(j, 1, queHead[i], 1) {
			if(tags[que[i][j]] == tag) continue;
			tags[que[i][j]] = tag;
			for(auto& next : edges[que[i][j]]) {
				ll val = max(i, next.se);
				if(!ckMin(linkRect[s][next.fi], val)) continue;
				que[val][++queHead[val]] = next.fi;
			}
		}
	}
}
void solve() {
	cin >> n >> l >> q;
	FOR(i, 1, n, 1) {
		edges[i].clear();
		FOR(j, 1, n, 1) linkRect[i][j] = INF;
	}
	FOR(i, 1, l, 1) {
		FOR(j, 1, n, 1) tmp[j] = -1, fa[j] = j, siz[j] = 1;
		pll speLink = { -1,-1 };
		ll siz = readLine();
		FOR(j, 1, siz, 1) {
			if (tmp[line[j]] == -1) tmp[line[j]] = j;
			else if (speLink.fi != -1) {
				speLink.fi = -2;
				break;
			}
			else speLink = { tmp[line[j]],j };
		}
		if (speLink.fi == -2) continue;
		else if (speLink.fi != -1) {
			ll x = 1;
			FOR(j, 2, n, 1) if (tmp[j] == -1) {
				x = j;
				break;
			}
			edges[speLink.fi].pb({ x,i });
			edges[speLink.se].pb({ x,i });
		}
		else FOR(j, 1, siz, 1) if(concat(j, line[j])) {
            edges[j].pb({ line[j],i });
            edges[line[j]].pb({ j,i });
        }
	}
	REP(1, n) bfs(i);

	while (q--) {
		readLine();
		cout << (linkRect[line[1]][line[2]] <= line[3]);
	}
	cout << endl;
}
int main() {
	ll t = 1;
	cin >> t;
	while (t--) solve();
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 7768kb

input:

2
5 2 4
0305040201
0404040404
030300
020500
050102
020501
6 2 4
030603010601
010203060504
030202
060402
050602
060401

output:

1011
0100

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 5720kb

input:

1
3 3 6
020202
030301
030201
020102
030203
010201
010303
020303
010202

output:

010101

result:

ok single line: '010101'

Test #3:

score: 0
Accepted
time: 53ms
memory: 7860kb

input:

200
10 10 5000
01060:04020305080709
0103070:060204050908
09070503080401060:02
050308010204090:0607
03010502040607080:09
03080109020504060:07
06050:09040302080107
07080305010409060:02
030809010:0204060507
0:060908070201050304
060700
090:03
09080:
070405
010703
0:0100
080601
030600
070206
0:0:09
08040...

output:

011110001101101111111111111111111101111111110111011110110110111011010111111111111111111101111111111110111111110111111111111101111111111110111111111111111111110001100111111111111111111111111011101111111111111111111111111111111111111111011011110100111110111111110111111100111111101110111111111101111110...

result:

ok 200 lines

Test #4:

score: 0
Accepted
time: 137ms
memory: 35620kb

input:

1
2000 1 1000000
M=:]A@8UAY7W2JJ4KEHIA[HSCQ1ENSC`JXR;F3PJ:_@41P9Z=9HR8P<<:DUXRR9^WOQFL?NZP6S@=J0^WE32=6;\U0?88]Q_RNPUMT6YU<4<S]H?:7OCQYOT4YAV1^764ENWSDBED>M7A:BI>KSIR48JQ9B=N\5T3N4A2aF0@>3TI81<G7;YE>W`NMP<:IT4CI3D0=GZC3I\CLQJQBA9BDIS9SAM55KaVA<Z@D=>:Y?CQHUQ5U3a6UVI8OKX9_FAF^7=5M85;<0;8YPAM<7Z7PP7A=N...

output:

000101000101100010001000000010010110000001000001001100000000010000100001000000101100000000010000001000000001110000010110100000111100100000001000000000011001010001000001001000100000000100011001100110010000010000101100000011111000000010000101010010000000010101000001010111100000100000000000000101000100...

result:

ok single line: '000101000101100010001000000010...0101000101000000000010101001000'

Test #5:

score: -100
Time Limit Exceeded

input:

1
2000 2000 1000000
FVAaH7GRPO;_11Da5J18@3SMG==\G8E8S^6:M4L0JH>MN5IXT>2<7WJ3U8LVJS=;;3F13>0D0>VOIIU@EPHG6ABL6;K?T1PXDERLG07]5C9^GDKG<SBMIW;`4W8P3=469TIPKH0O34523_J5C2MJ17D25Z@=K8H@M>WK<CMK7EO]BPD7B6AW741J5YIHIa1:ERSG>L3N2^F3<4F`DLE@2AA5=8GZK6:192FB736[WMV7:^DA2C:<LK040VJBM3M]WXU50`407TR_?PLF@5VL7OSL...

output:


result: