QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#21416#2819. 摆家具gogoWA 507ms242844kbC++203.7kb2022-03-04 22:38:482022-05-08 03:13:32

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-05-08 03:13:32]
  • 评测
  • 测评结果:WA
  • 用时:507ms
  • 内存:242844kb
  • [2022-03-04 22:38:48]
  • 提交

answer

#include<bits/stdc++.h>
#define rep(i, l, r) for(int i = (l); i <= (r); i ++)
#define per(i, r, l) for(int i = (r); i >= (l); i --)
#define trv(i, u, v) for(int i = head[u], v = e[i].to; i; v = e[i = e[i].nxt].to)
#define fi first
#define se second
#define all(s) s.begin(), s.end()
#define sz(s) (int)(s.size())
#define lb(s) ((s) & -(s))
#define pb push_back
using namespace std;

typedef long long ll;
typedef pair<int, int> P;
mt19937_64 hua(time(0));
template<typename T> inline bool chkmx(T &x, T y) {return x < y ? x = y, 1 : 0;}
template<typename T> inline bool chkmn(T &x, T y) {return y < x ? x = y, 1 : 0;}
template<int T> using A = array<int, T>;

inline ll read() {
	ll x = 0, f = 1; char c = getchar();
	for(; !isdigit(c); c = getchar()) if(c == '-')  f = 0;
	for(; isdigit(c); c = getchar()) x = x * 10 + c - '0';
	return f ? x : -x;
}
const int maxn = 1e6;
const int maxk = 20;
//const int B = 1e5;
const int B = 3e3; 
const int mod = 998244353;
int n, k, q, N, pw[maxk + 5], w[maxn + 5];
int fac[maxk + 5], ifac[maxk + 5], inv[maxk + 5];
int f[maxn + 5][maxk + 5], g[maxn + 5][maxk + 5], h[maxn + 5][maxk + 5];
inline int add(int a, int b) {return (a += b) >= mod ? a - mod : a;}
inline int sub(int a, int b) {return (a -= b) < 0 ? a + mod : a;} 
inline int mul(int a, int b) {return 1ll * a * b % mod;}
inline void upd(int &a, int b) {a = add(a, b);}
inline int fpw(int a, int b) {
	int ans = 1;
	for(; b; b >>= 1, a = mul(a, a)) if(b & 1) ans = mul(ans, a);
	return ans;
}
struct Mat {
	int a[maxk + 1][maxk + 1];
	int* operator [] (int x) {return a[x];}
	Mat() {memset(a, 0, sizeof a);}
	friend Mat operator * (Mat x, Mat y) {
		Mat z;
		rep(i, 0, k) rep(j, 0, k) rep(l, 0, k) {
			upd(z[i][j], mul(x[i][l], y[l][j]));
		}
		return z;
	}
}mpw1[B + 5], mpw2[B + 5], mpw3[B + 5];
void init() {
	fac[0] = fac[1] = inv[0] = inv[1] = ifac[0] = ifac[1] = 1;
	rep(i, 2, maxk) fac[i] = mul(fac[i - 1], i);
	rep(i, 2, maxk) inv[i] = mul(inv[mod % i], mod - mod / i);
	rep(i, 2, maxk) ifac[i] = mul(ifac[i - 1], inv[i]); 
}
inline int c(int n, int m) {return mul(fac[n], mul(ifac[m], ifac[n - m]));} 
int main() {
//	freopen("in.txt", "r", stdin);
	n = read(), k = read(), q = read();
	N = fpw(n, k);
	pw[0] = 1;
	init();
	rep(i, 1, k) pw[i] = pw[i - 1] * n;
	rep(i, 0, N - 1) f[i][0] = w[i] = read();
	rep(i, 0, k - 1) {
		memcpy(g, f, sizeof g);
		memcpy(h, f, sizeof h);
		rep(s, 0, N - 1) {
			rep(j, 0, k) {
				if(s / pw[i] % n != n - 1) {
					upd(g[s][j], g[s + pw[i]][j]);
				}
			}
		}
		rep(s, 0, N - 1) {
			rep(j, 0, k) {
				if(s / pw[i] % n != 0) {
					upd(h[s][j], h[s - pw[i]][j]);
				}
			}
		}
		rep(s, 0, N - 1) {
			per(j, k, 0) {
				f[s][j] = 0;
				if(s / pw[i] % n != 0) upd(f[s][j], h[s - pw[i]][j]);
				if(s / pw[i] % n != n - 1) upd(f[s][j], g[s + pw[i]][j]);
				if(j) upd(f[s][j], f[s][j - 1]);
			}
		}
	}
//	rep(i, 0, N - 1) {
//		rep(j, 0, k) {
//			cout << f[i][j] << " \n"[j == k];
//		}
//	}
	Mat bs;
	rep(i, 0, k) {
		bs[i][i] = mul(k - i, n - 2);
		mpw1[0][i][i] = mpw2[0][i][i] = mpw3[0][i][i] = 1;
	}
	rep(i, 1, k) {
		bs[i][i - 1] = mul(i, n - 1);
	}
	rep(i, 0, k - 1) {
		bs[i][i + 1] = k - i;
	}
	rep(i, 1, B) {
		mpw1[i] = mpw1[i - 1] * bs;
	}
	rep(i, 1, B) {
		mpw2[i] = mpw2[i - 1] * mpw1[B];
	}
	rep(i, 1, B) {
		mpw3[i] = mpw3[i - 1] * mpw2[B];
	}
	ll lstans = 1;
	rep(i, 1, q) {
		lstans = 1;
		ll a = read(), t = read() * lstans % mod;
		int x = t / B % B, y = t % B, z = t / B / B, ans = 0;
		Mat cur = mpw3[z] * mpw2[x] * mpw1[y];
		rep(i, 0, k) {
//			cout << cur[k][i] <<  " \n"[i == k];
			upd(ans, mul(mul(cur[k][i], f[a][i]), fpw(mul(c(k, i), fpw(n - 1, k - i)), mod - 2)));
		}
		cout << (lstans = ans) << '\n';
	}
	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 507ms
memory: 242844kb

input:

6 7 23333
691899807
511100503
969237388
938904792
350428599
320423686
227132681
288051232
833056445
128207711
81740114
850060462
194951182
130925016
505452669
304380595
703105541
640122112
75295756
128144693
482592240
835507949
68960843
807876145
6134269
259053259
386495729
193956365
370675670
12980...

output:

344801506
198121185
554066339
777695729
216146942
11254892
823676127
248412925
690476273
933937267
98454728
991889558
297333160
491990358
591046174
214572662
270858781
439051750
169696355
776923739
713068393
690721846
892757788
765203620
105777689
758659338
681150011
508564855
33117748
266801558
123...

result:

wrong answer 1st lines differ - expected: '190581075', found: '344801506'