Submission #10316065
Source Code Expand
#pragma GCC optimize("Ofast")
#include <cstdio>
#include <cstdlib>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
#include <bitset>
#include <cmath>
#include <limits>
#include <iostream>
#include <map>
#include <set>
#include <tuple>
#include <iomanip>
#include <functional>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
typedef pair<ll,ll> pll;
template<class T,class U>constexpr bool chmin(T&a,const U b){if(a<=b)return false;a=b;return true;}
template<class T,class U>constexpr bool chmax(T&a,const U b){if(a>=b)return false;a=b;return true;}
#define bit(n,k) ( (n>>k)&1 )
//デバッグ
template<class T>
void Vout(vector<T> &V){
cout<<"\nstart\n";
const int sz=V.size();
for(int i=0;i<sz;i++){
cout<<i<<" "<<V[i]<<'\n';
}
cout<<"end\n"<<endl;
}
template<class T>
void VPout(vector<T> &V){
cout<<"\nstart\n";
const int sz=V.size();
for(int i=0;i<sz;i++){
cout<<i<<" "<<V[i].first<<" "<<V[i].second<<'\n';
}
cout<<"end\n"<<endl;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
constexpr int MAX=1<<30;
constexpr ll INF=1LL<<62;
constexpr int MOD=1e9+7;
int dx[]={1,-1,0,0},dy[]={0,0,-1,1};
//__builtin_popcount(S);
//#define int ll
//vector<vector<int>> data(3, vector<int>(4));
//vector.resize(a,vector<int>(b,-1));
//vector<vector<vector<要素の型>>> 変数名(要素数1, vector<vector<要素の型>>(要素数2, vector<要素の型>(要素数3, 初期値)));
struct ModInt{
ll a;
constexpr ModInt() :a(0){}
constexpr ModInt(ll x) :a((x>=0)?(x%MOD):(x%MOD+MOD) ) {}
constexpr ModInt operator+(const ModInt rhs)const noexcept{
return ModInt(*this)+=rhs;
}
constexpr ModInt operator-(const ModInt rhs)const noexcept{
return ModInt(*this)-=rhs;
}
constexpr ModInt operator*(const ModInt rhs)const noexcept{
return ModInt(*this)*=rhs;
}
constexpr ModInt operator/(const ModInt rhs)const noexcept{
return ModInt(*this)/=rhs;
}
constexpr ModInt operator+(const ll rhs) const noexcept{
return ModInt(*this)+=rhs;
}
constexpr ModInt operator-(const ll rhs)const noexcept{
return ModInt(*this)-=rhs;
}
constexpr ModInt operator*(const ll rhs)const noexcept{
return ModInt(*this)*=rhs;
}
constexpr ModInt operator/(const ll rhs)const noexcept{
return ModInt(*this)/=rhs;
}
constexpr ModInt &operator+=(const ModInt rhs)noexcept{
a+=rhs.a;
if(a>=MOD) a-=MOD;
return *this;
}
constexpr ModInt &operator-=(const ModInt rhs)noexcept{
a-=rhs.a;
if(a<0) a+=MOD;
return *this;
}
constexpr ModInt &operator*=(const ModInt rhs)noexcept{
a=(a*rhs.a)%MOD;
return *this;
}
constexpr ModInt &operator/=(ModInt rhs)noexcept{
a=(a*rhs.inverse().a)%MOD;
return *this;
}
constexpr ModInt &operator+=(const ll rhs)noexcept{
a+=rhs;
if(a>=MOD) a-=MOD;
return *this;
}
constexpr ModInt &operator-=(const ll rhs)noexcept{
a-=rhs;
if(a<0) a+=MOD;
return *this;
}
constexpr ModInt &operator*=(const ll rhs)noexcept{
a=(a*rhs)%MOD;
return *this;
}
constexpr ModInt &operator/=(ll rhs)noexcept{
a=(a*ModInt(rhs).inverse().a)%MOD;
return *this;
}
constexpr ModInt operator=(ll x)noexcept{
x%=MOD;
if(x<0) x+=MOD;
a=x;
return *this;
}
constexpr bool operator==(const ModInt p)const noexcept{
return a==p.a;
}
constexpr bool operator!=(const ModInt p)const noexcept{
return a!=p.a;
}
constexpr ModInt pow(ll N) const noexcept{
ModInt ans(1LL),p(a);
while(N>0){
if(bit(N,0)){
ans*=p;
}
p*=p;
N>>=1;
}
return ans;
}
constexpr ModInt inverse() const noexcept{
return pow(MOD-2);
}
};
inline constexpr ModInt operator+(const ll &a,const ModInt &b)noexcept{
return ModInt(a)+=b;
}
inline constexpr ModInt operator-(const ll &a,const ModInt &b)noexcept{
return ModInt(a)-=b;
}
inline constexpr ModInt operator*(const ll &a,const ModInt &b)noexcept{
return ModInt(a)*=b;
}
inline constexpr ModInt operator/(const ll &a,const ModInt &b)noexcept{
return ModInt(a)/=b;
}
constexpr ModInt Mr(ll p){
p%=MOD;
if(p<0) p+=MOD;
return ModInt(p);
}
ModInt dp[110][260][110];
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout<<fixed<<setprecision(10);
int n;
int k;
cin>>n>>k;
vector<int> a(n);
for(int i=0;i<n;i++) cin>>a[i];
dp[0][0][0]=1;
for(int i=0;i<n;i++){
for(int S=0;S<(1<<8);S++){
for(int k=0;k<=i;k++){
if(dp[i][S][k]==0) continue;
dp[i+1][S][k]+=dp[i][S][k];
dp[i+1][S^a[i]][k+1]+=dp[i][S][k];
}
}
}
ModInt ans(0);
ModInt t(1);
for(int i=0;i<=n;i++){
ans+=dp[n][k][i]*t;
t*=(i+1);
}
cout<<ans.a<<endl;
}
Submission Info
Submission Time |
|
Task |
C - Solving XOR-Puzzles |
User |
bin101 |
Language |
C++14 (GCC 5.4.1) |
Score |
400 |
Code Size |
5703 Byte |
Status |
AC |
Exec Time |
12 ms |
Memory |
23680 KB |
Judge Result
Set Name |
Sample |
Subtask1 |
Subtask2 |
Subtask3 |
Score / Max Score |
0 / 0 |
50 / 50 |
170 / 170 |
180 / 180 |
Status |
|
|
|
|
Set Name |
Test Cases |
Sample |
sample_1.txt, sample_2.txt, sample_4.txt |
Subtask1 |
sample_1.txt, sample_2.txt, sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub1_in4.txt, sub1_in5.txt, sub1_in6.txt, sub1_in7.txt |
Subtask2 |
sample_1.txt, sample_2.txt, sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub1_in4.txt, sub1_in5.txt, sub1_in6.txt, sub1_in7.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt, sub2_in4.txt, sub2_in5.txt, sub2_in6.txt, sub2_in7.txt, sub2_in8.txt, sub2_in9.txt |
Subtask3 |
sample_1.txt, sample_2.txt, sample_4.txt, sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub1_in4.txt, sub1_in5.txt, sub1_in6.txt, sub1_in7.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt, sub2_in4.txt, sub2_in5.txt, sub2_in6.txt, sub2_in7.txt, sub2_in8.txt, sub2_in9.txt, sub3_in1.txt, sub3_in2.txt, sub3_in3.txt, sub3_in4.txt, sub3_in5.txt, sub3_in6.txt, sub3_in7.txt, sub3_in8.txt, sub3_in9.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_1.txt |
AC |
1 ms |
256 KB |
sample_2.txt |
AC |
1 ms |
256 KB |
sample_4.txt |
AC |
2 ms |
4608 KB |
sub1_in1.txt |
AC |
1 ms |
256 KB |
sub1_in2.txt |
AC |
1 ms |
256 KB |
sub1_in3.txt |
AC |
1 ms |
256 KB |
sub1_in4.txt |
AC |
1 ms |
256 KB |
sub1_in5.txt |
AC |
1 ms |
256 KB |
sub1_in6.txt |
AC |
1 ms |
256 KB |
sub1_in7.txt |
AC |
1 ms |
256 KB |
sub2_in1.txt |
AC |
3 ms |
5120 KB |
sub2_in2.txt |
AC |
3 ms |
4992 KB |
sub2_in3.txt |
AC |
3 ms |
4864 KB |
sub2_in4.txt |
AC |
3 ms |
5248 KB |
sub2_in5.txt |
AC |
3 ms |
5120 KB |
sub2_in6.txt |
AC |
3 ms |
4864 KB |
sub2_in7.txt |
AC |
3 ms |
5120 KB |
sub2_in8.txt |
AC |
3 ms |
5248 KB |
sub2_in9.txt |
AC |
3 ms |
5248 KB |
sub3_in1.txt |
AC |
12 ms |
23552 KB |
sub3_in2.txt |
AC |
12 ms |
23680 KB |
sub3_in3.txt |
AC |
12 ms |
23680 KB |
sub3_in4.txt |
AC |
12 ms |
23552 KB |
sub3_in5.txt |
AC |
12 ms |
23680 KB |
sub3_in6.txt |
AC |
12 ms |
23680 KB |
sub3_in7.txt |
AC |
12 ms |
23552 KB |
sub3_in8.txt |
AC |
12 ms |
23680 KB |
sub3_in9.txt |
AC |
12 ms |
23552 KB |