結果
問題 | No.1304 あなたは基本が何か知っていますか?私は知っています. |
ユーザー | face4 |
提出日時 | 2020-12-05 11:28:32 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 122 ms / 2,000 ms |
コード長 | 1,059 bytes |
コンパイル時間 | 907 ms |
コンパイル使用メモリ | 78,024 KB |
実行使用メモリ | 23,124 KB |
最終ジャッジ日時 | 2024-06-12 15:04:33 |
合計ジャッジ時間 | 35,123 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 45 RE * 20 TLE * 9 |
ソースコード
#include<iostream> #include<vector> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; const ll mod = 998244353; int dp[2][1<<10][1<<10] = {}; int main(){ int n, k, x, y; cin >> n >> k >> x >> y; vector<int> v; for(int i = 0; i < k; i++){ int a; cin >> a; v.push_back(a); } sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); ll sum[1<<10] = {}; sum[0] = 1; for(int i = 0; i < n; i++){ for(int j = 0; j < 1<<10; j++){ for(int t : v){ dp[1][t][j] = sum[t^j]-dp[0][t][t^j]; } } swap(dp[0], dp[1]); memset(dp[1], 0, sizeof(dp[1])); for(int j = 0; j < 1<<10; j++){ sum[j] = 0; for(int l = 0; l < 1<<10; l++){ sum[j] += dp[0][l][j]; } sum[j] %= mod; } } ll ans = 0; for(int i = x; i <= min(1023, y); i++){ (ans += sum[i]) %= mod; } cout << ans << endl; return 0; }