int n, m, k; voidsolve(){ read(n), read(m), read(k); for (registerint i = 1, x, y; i <= k; ++i) read(x), read(y); for (registerint i = 1, x, y; i <= k; ++i) read(x), read(y); print(n + m + n * m - 1); for (registerint i = 1; i <= n; ++i) putchar('U'); for (registerint i = 1; i <= m; ++i) putchar('L'); for (registerint i = 1; i <= n; ++i){ for (registerint j = 1; j < m; ++j) putchar(i & 1 ? 'R' : 'L'); if (i < n) putchar('D'); } putchar('\n'); }
constint N = 200005; int n, p[N], c[N], vis[N]; intsolve(std::vector<int> &a){ std::vector<int> d; int l = a.size(); for (registerint i = 1; 1ll * i * i <= l; ++i) // 求因数 if (l % i == 0){ d.push_back(i); if (i * i < l) d.push_back(l / i); } std::sort(d.begin(), d.end()); for (int k : d){ // 枚举 k for (registerint i = 0; i < k; ++i){ bool flag = 1; for (registerint j = i; j < l; j += k) flag &= a[j] == a[i]; // 判断颜色是否相同 if (flag) return k; } } return l; } voidsolve(){ read(n); for (registerint i = 1; i <= n; ++i) read(p[i]), vis[i] = 0; for (registerint i = 1; i <= n; ++i) read(c[i]); int ans = n; for (registerint i = 1; i <= n; ++i) if (!vis[i]){ std::vector<int> tmp; tmp.push_back(c[i]), vis[i] = 1; for (registerint j = p[i]; j != i; j = p[j]) tmp.push_back(c[j]), vis[j] = 1; ans = std::min(ans, solve(tmp)); } print(ans); }
constint N = 200005, P = 998244353; int n, f[N]; voidinc(int &a, int b){ (a += b) >= P ? a -= P : 0; } voiddec(int &a, int b){ a < b ? a += P - b : a -= b; } voidsolve(){ read(n); int pw = 10; for (registerint i = n; i; --i){ f[i] = 1ll * pw * (n - i + 1) % P; pw = 10ll * pw % P; } for (registerint i = 1; i <= n; ++i){ dec(f[i], f[i + 1]), dec(f[i], f[i + 1]), inc(f[i], f[i + 2]); print(f[i], ' '); } putchar('\n'); }
constint N = 500005, P = 998244353; int n, k, m, a[N], l[N], r[N], x[N], f[N], pos[N]; voidinc(int &a, int b){ (a += b) >= P ? a -= P : 0; } voiddec(int &a, int b){ a < b ? a += P - b : a -= b; } voidsolve(){ read(n), read(k), read(m); for (registerint i = 1; i <= m; ++i) read(l[i]), read(r[i]), ++r[i], read(x[i]); int ans = 1; for (registerint p = 0; p < k; ++p){ for (registerint i = 1; i <= n + 1; ++i) pos[i] = 0, a[i] = 0; for (registerint i = 1; i <= m; ++i) if (x[i] >> p & 1) ++a[l[i]], --a[r[i]]; // 差分实现区间加 else pos[r[i]] = std::max(pos[r[i]], l[i]); for (registerint i = 2; i <= n + 1; ++i) a[i] += a[i - 1], pos[i] = std::max(pos[i], pos[i - 1]); // a 预处理第 i 位是否强制选 1 // pos 预处理 i 之前第一个 0 至少选在哪里 for (registerint i = 0; i <= n + 1; ++i) f[0] = 0; f[0] = 1; int sum = 1, l = 0; for (registerint i = 1; i <= n + 1; ++i){ while (l < pos[i]) dec(sum, f[l]), f[l] = 0, ++l; // 把 < pos[i] 的位置刷成 0 f[i] = a[i] ? 0 : sum, inc(sum, f[i]); // 修改第 i 个位置的 dp 值 } ans = 1ll * ans * f[n + 1] % P; } print(ans); }