[hdu6316]Odd shops
记$m=10$,即商品的种类
记$g(x)=1+\sum_{i=1}^{m}a_{i}x_{i}$,问题即求$f_{n}(x)=g^{n}(x)$非0项数(模2意义下)
注意到$f^{2}(x)\equiv f(x^{2})(mod\ 2)$,这是因为如果所选的项在两边不同,那么交换后即会抵消
令$F(n,A)$为$A(x)f_{n}(x)$非0项数,即有$\begin{cases}F(n+1,A)=F(n,A\cdot g)\\F(2n,A)=F(n,E)+F(n,O)\end{cases}$
(其中$E(x)$和$O(x)$满足$A(x)=E(x^{2})+xO(x^{2})$,即将$A(x)$按照奇偶次划分)
第一个式子显然成立,对于第二个式子,考虑有
$$
A(x)f_{2n}(x)=A(x)f_{n}^{2}(x)\equiv E(x^{2})f_{n}(x^{2})+xO(x^{2})f_{n}(x^{2})(mod\ 2)
$$
注意到$E(x^{2})f_{n}(x^{2})$和$xO(x^{2})f_{n}(x^{2})$两者没有重复项,因此直接将两者的非0项数相加即可,同时显然两者的非0项数等于$E(x)f_{n}(x)$和$O(x)f_{n}(x)$的非0项数,递归即可
对于$F(n,A)$,注意到$n$有$o(\log n)$种,$A$最高次数不超过10(归纳即可),在模2意义下只有$2^{m+1}$种,总状态数即为$o(2^{m+1}\log n)$,直接递归计算即可
另外,关于$A$的存储可以使用int来表示,那么两数(多项式)相乘复杂度为$o(m)$
总复杂度为$o(m2^{m+1}\log n)$,可以通过
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 998244353
4 int n,x,g,sum[(1<<11)],f[40][(1<<11)];
5 int mul(int x,int y){
6 int ans=0;
7 for(int i=0;i<=10;i++)
8 if (x&(1<<i))ans^=(y<<i);
9 return ans;
10 }
11 int dfs(int n,int a,int s){
12 if (f[s][a]>=0)return f[s][a];
13 if (!n)return sum[a];
14 int aa=a;
15 if (n&1)aa=mul(a,g);
16 int E=0,O=0;
17 for(int i=0;i<=20;i++)
18 if (aa&(1<<i)){
19 if (i&1)O|=(1<<(i>>1));
20 else E|=(1<<(i>>1));
21 }
22 return f[s][a]=(dfs((n>>1),E,s+1)+dfs((n>>1),O,s+1))%mod;
23 }
24 int main(){
25 for(int i=0;i<(1<<11);i++)sum[i]=sum[(i>>1)]+(i&1);
26 while (scanf("%d",&n)!=EOF){
27 g=1;
28 for(int i=1;i<=10;i++){
29 scanf("%d",&x);
30 if (x&1)g|=(1<<i);
31 }
32 memset(f,-1,sizeof(f));
33 printf("%d\n",dfs(n,1,0));
34 }
35 }
[hdu6316]Odd shops的更多相关文章
- 【hdu多校联考第二场】Odd Shops
Description 这道题的题意是这道难读,大概就是给你n个商店,每个商店的重量为i的商品用ai表示,对于任意商店的a数列都是相同的,重量的范围为[1,10] 求购买方案总数为奇数的重量一共有多少 ...
- 2018 Multi-University Training Contest 2 Solution
A - Absolute 留坑. B - Counting Permutations 留坑. C - Cover 留坑. D - Game puts("Yes") #include ...
- RE:ゼロから始める文化課生活
觉得有必要在NOI之前开一篇学习内容记录. 至于为什么要取这个标题呢?也许并没有什么特殊的借口吧. 5.23 在LOJ上搬了三道原题给大家考了考,然后大家都在考试就我一个人在划水. SSerxhs 和 ...
- [LeetCode] Odd Even Linked List 奇偶链表
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- LeetCode 328. Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- tr:even 与tr:odd
:even匹配所有索引值为偶数的元素,从 0 开始计数查找表格的1.3.5...行(即索引值0.2.4...)<table> <tr><td>Header 1< ...
- Leetcode Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- CSS3伪类选择器:nth-child()(nth-child(odd)/nth-child(even))
nth-child(odd):奇数 nth-child(even):偶数 使用时,如果是精确到数字时,切记是从同一级别的元素开始计算,而不是指定某个类才开始计算. 比如: <li>< ...
随机推荐
- 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先
3 月 26 日消息,权威咨询机构 Forrester 发布 2021 年第一季度 FaaS 平台评估报告,阿里云函数计算凭借在产品能力.安全性.战略愿景和市场规模等方面的优势脱颖而出,产品能力位列全 ...
- 点击按钮改变div背景色,再次点击恢复 -- 原生JS
如果对您有帮助,记得点个赞哦!
- 题解 CF961G 【Partitions】
题目传送门 题目大意 给出\(n,k\),以及\(w_{1,2,..,n}\),定义一个集合\(S\)的权值\(W(S)=|S|\sum_{x\in S} w_x\),定义一个划分\(R\)的权值为\ ...
- 洛谷4172 WC2006水管局长(LCT维护最小生成树)
这个题和魔法森林感觉有很相近的地方啊 同样也是维护一个类似最大边权最小的生成树 但是不同的是,这个题是有\(cut\)和询问,两种操作.... 这可如何是好啊? 我们不妨倒着来考虑,假设所有要\(cu ...
- 单机CentOS 安装 TiDB
目录 一.官网教程 二.安装步骤 1.下载并安装 TiUP: 2.声明一下环境变量,否则会找不到 tiup 命令 3.安装 TiUP 的 cluster 组件: 4.官方教程说,由于模拟多机部署,需要 ...
- 如何知道当前使用的python的安装路径
电脑里多处安装了python,那么如何得知当前使用python的安装路径呢? 方法一 运行python指令: import sys print(sys.executable) 方法二 对于终端和Win ...
- 剑指offer:JZ9 用两个栈实现队列
JZ9 用两个栈实现队列 描述 用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能. 队列中的元素为int类型.保证操作合法,即保 ...
- 【做题记录】 [JLOI2011]不等式组
P5482 [JLOI2011]不等式组 超烦人的细节题!(本人调了两天 QAQ ) 这里介绍一种只用到一只树状数组的写法(离线). 树状数组的下标是:所有可能出现的数据进行离散化之后的值. 其含义为 ...
- linux下创建文件的文件权限问题
今天发现创建文件的权限和自己规定的权限不一致,了解到了权限掩码的问题,这里总结一下. 首先权限掩码umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常我们都 ...
- 访问所有HTTPS网站显示连接不安全 (火狐浏览器)
当 Firefox 连接到一个安全的网站时(网址最开始为"https://"),它必须确认该网站出具的证书有效且使用足够高的加密强度.如果证书无法通过验证,或加密强度过低,Fire ...