結果
問題 | No.1304 あなたは基本が何か知っていますか?私は知っています. |
ユーザー |
👑 ![]() |
提出日時 | 2020-12-01 23:24:43 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 16 ms / 2,000 ms |
コード長 | 1,390 bytes |
コンパイル時間 | 674 ms |
コンパイル使用メモリ | 74,116 KB |
実行使用メモリ | 15,260 KB |
最終ジャッジ日時 | 2024-06-12 12:21:14 |
合計ジャッジ時間 | 43,443 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 45 RE * 10 TLE * 9 MLE * 10 |
ソースコード
#include<iostream>#include<vector>using namespace std;using ll = long long;int min(int x, int y) {if (x > y) {return y;}else {return x;}}int main() {int N, K, X, Y;cin >> N >> K >> X >> Y;ll Mod = 998244353;ll T = 1023;vector<int> A(K, 0);for (int i = 0; i < K; i++) {cin >> A[i];}vector<vector<int>> DP(K, vector<int>(T + 1)), ODP(K, vector<int>(T + 1, 0));for (int i = 0; i < K; i++) {DP[i][A[i]] = 1;}for (int m = 2; m <= N; m++) {for (int i = 0; i < K; i++) {for (int x = 0; x <= T; x++) {ODP[i][x] = DP[i][x];DP[i][x] = 0;}}vector<int> S(T + 1, 0);for (int i = 0; i < K; i++) {for (int x = 0; x <= T; x++) {S[x] += ODP[i][x];S[x] %= Mod;}}for (int i = 0; i < K; i++) {for (int x = 0; x <= T; x++) {DP[i][x] = S[x ^ A[i]] - ODP[i][x ^ A[i]];DP[i][x] %= Mod;DP[i][x] = (Mod + DP[i][x]) % Mod;}}}ll B = 0;Y = min(T, Y);for (int i = 0; i < K; i++) {for (int x = X; x <= Y; x++) {B += DP[i][x];}B %= Mod;}cout << B << endl;}