結果
問題 | No.1304 あなたは基本が何か知っていますか?私は知っています. |
ユーザー |
![]() |
提出日時 | 2020-12-01 19:53:48 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,438 ms / 2,000 ms |
コード長 | 913 bytes |
コンパイル時間 | 2,352 ms |
コンパイル使用メモリ | 205,076 KB |
最終ジャッジ日時 | 2025-01-16 11:58:42 |
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 44 WA * 9 RE * 21 |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000000000000000 int N,K,X,Y; vector<int> B; vector<vector<long long>> cnt(1024,vector<long long>(1024,0)); void dfs(int n,int x,int last){ if(n==0){ cnt[x][last]++; return; } rep(i,B.size()){ if(i==last)continue; dfs(n-1,x^B[i],i); } } int main(){ cin>>N>>K>>X>>Y; set<int> A; rep(i,K){ int a; cin>>a; if(A.count(a))continue; A.insert(a); B.push_back(a); } /* rep(i,1024){ if(A.count(i))continue; B.push_back(i); } */ dfs(N/2,0,-1); vector<long long> Cnt(1024,0); rep(i,1024){ rep(j,1024)Cnt[i] += cnt[i][j]; } long long ans = 0; rep(i,1024){ rep(k,1024){ if(X<=(i^k)&&(i^k)<=Y){ rep(j,1024){ ans += cnt[i][j] * (Cnt[k]-cnt[k][j]); } } } } cout<<ans%998244353<<endl; return 0; }