博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj4903 [Ctsc2017]吉夫特
阅读量:4971 次
发布时间:2019-06-12

本文共 927 字,大约阅读时间需要 3 分钟。

1330366-20180620090533706-88252503.png

搞了半天这个东西要用 Lucas 定理啊。。。
1330366-20180620090819403-1046591813.png

学好这些姿势你就可以A了。。。

显然:
\[{0 \choose 1}=0\ \ \ {1 \choose 1}=1\ \ \ {1 \choose 0}=1\ \ \ {0 \choose 0}=1\]
你一直用这个 Lucas 定理,又因为 mod = 2, 实际上就是把两个二进数数挨着挨着一位一位的比较。
所以你只要在过程中没有 \({0 \choose 1}\) 就好了。
在进一步就成了 \(n & m = m\) 就满足了。
你 dp 自己枚举一下岂不是很完美?

#include
using namespace std;const int maxn = 234567, mod = 1e9 + 7;int n, ans, ini[maxn], lpl[maxn], pw[63];inline void prepare(){ pw[1] = 1; for(int i = 2; i <= 20; ++i) pw[i] = pw[i - 1] * 2;}int main(){ prepare(); scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d", &ini[i]); for(int now, i = n; i >= 1; --i){ now = ini[i]; lpl[ini[i]] = 1; for(int j = now; j; ){ j = (j - 1) & now; lpl[ini[i]] = (lpl[ini[i]] + lpl[j]) % mod; } } for(int i = 1; i <= n; ++i) ans = (ans + lpl[ini[i]]) % mod; cout << ans - n; return 0;}

转载于:https://www.cnblogs.com/LLppdd/p/9202222.html

你可能感兴趣的文章
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>
20120227_CET6
查看>>
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
leetcode【67】-Bulb Switcher
查看>>
JS验证图片格式和大小并预览
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
接口和抽象类有什么区别
查看>>
Codeforces Round #206 (Div. 2)
查看>>
Mycat分表分库
查看>>
模板的文件名和方法名一定要一致!!
查看>>
**p
查看>>
优先队列详解
查看>>