2844: albus就是要第一个出场
2024-09-07 22:02:21
2844: albus就是要第一个出场
分析:
和HDU3949差不多互逆,这里需要加上相同的数。
结论:所有数任意异或,构成的数出现一样的次数,次数为$2^{n-cnt}$,cnt为线性基的大小。
结论:集合中所有异或值为0的集合有$2^{n-cnt}$个(包括空集)。
证明及详细过程参考:https://blog.sengxian.com/algorithms/linear-basis,https://blog.csdn.net/jaihk662/article/details/78654679
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL; char buf[],*_p1 = buf,*_p2 = buf;
#define nc() (_p1==_p2&&(_p2=(_p1=buf)+fread(buf,1,100000,stdin),_p1==_p2) ? EOF : *_p1++)
inline int read() {
int x=,f=;char ch=nc();for(;!isdigit(ch);ch=nc())if(ch=='-')f=-;
for (;isdigit(ch);ch=nc())x=x*+ch-'';return x*f;
} const int N = ;
const int m = ;
const int mod = ; int a[N],b[];
vector<int> v;
int n,cnt; inline void build() {
for (int i=; i<=n; ++i)
for (int j=m; j>=; --j)
if ((a[i] >> j) & ) {
if (b[j]) a[i] ^= b[j];
else {
cnt++;b[j] = a[i];
for (int k=j-; k>=; --k) if (b[k]&&((b[j]>>k)&)) b[j] ^= b[k]; // 这两行可以省掉,因为下面用不到,只判断一下
for (int k=j+; k<=m; ++k) if ((b[j]>>k)&) b[k] ^= b[j];
break;
}
}
for (int i=; i<=m; ++i)
if (b[i]) v.push_back(i); // --push_back(i),说明(1<<i)的位置有1
}
inline int ksm(int a,int b) {
int ans = ; // --
while (b) {
if (b & ) ans = (ans * a) % mod;
a = (a * a) % mod;
b >>= ;
}
return ans % mod;
}
inline void solve() {
int q = read();
if (q == ) {cout << ;return ;}
int rnk = ,sz = v.size();
for (int i=; i<sz; ++i) // 得到排名,从小的开始取,看v[i]能否才参与构成q,如果可以加上2^i,i为v[i]的排名(第i个线性基元素)
if ((q >> v[i]) & ) rnk += ( << i);
cout << (rnk % mod * ksm(,n-cnt) + ) % mod; // 加一:包括空集
}
int main() {
n = read();
for (int i=; i<=n; ++i) a[i] = read();
build();
solve();
return ;
}
最新文章
- 二叉树的创建和遍历(C版和java版)
- gitlab 创建SSH Keys 报500错
- web前端学习(二) javascript对象和原型继承
- 自定义Cell的方法
- Android ActionBar的基本用法
- Dig out deleted chat messages of App Skype
- newCachedThreadPool线程池
- NOI2005维修数列 splay
- CRC16校验
- 笔记——ES5 Array
- IEEE 754 浮点数的四种舍入方式
- Area - POJ 1265(pick定理求格点数+求多边形面积)
- SSH返回Json格式的数据
- 黑马入学基础测试(三)求斐波那契数列第n项,n<;30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
- SCVMM更换数据库,如何搞?
- Window10安装TestLink,以及登录mysql数据库的错误处理
- Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good
- POJ3187 Backward Digit Sums
- MyBatis 一、二级缓存和自定义缓存
- 修改Android idc文件