[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>< ...
随机推荐
- java 从零开始手写 RPC (03) 如何实现客户端调用服务端?
说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的 ...
- Python小知识之对象的比较
好久不见 国庆回了趟老家,躺平了10天.作息时间基本和小学生差不多,8.9点就睡了, 那滋味别提多舒服了.时间也和小时候过得一样慢了...长时间不更新,还是不行滴,粉都快掉没了. 今天就结合日常生活的 ...
- C++学习 2 指针
指针:指针保存的是数据的地址: #include<iostream> using namespace std; int main() { //1.定义指针 int a = 10; //指针 ...
- 1-Java继承中多态情况特性下变量,方法,静态方法的访问
在Java继承下,多态特性下类成员访问情况 /* 在继承中,变量时静态的绑定的,非静态方法是动态的绑定的,静态方法是静态绑定的 */ class Parent{ int number = 11; pu ...
- 用C++实现的数独解题程序 SudokuSolver 2.4 及实例分析
SudokuSolver 2.4 程序实现 本次版本实现了 用C++实现的数独解题程序 SudokuSolver 2.3 及实例分析 里发现的第三个不完全收缩 grp 算法 thirdGreenWor ...
- Java泛型背后是什么?
文Java中泛型的应用,让大家更好地理解泛型,以及常说的泛型类型擦除是什么概念,举一个简单的例子,如下: 这里可以看出来在代码编写阶段就已经报错了,不能往string类型的集合中添加int类型的数据. ...
- JDK 8中重要的函数式接口(必知必会)
JDK 8 提供的重要函数式接口: Consumer (消费者) 功能:接收一个对象,返回void. 定义:void accept(T t) 默认方法:Consumer andThen(Consume ...
- Ubuntu 用户管理/权限管理
Ubuntu 用户管理/权限管理 小小记录一下 Ubuntu 下用户/权限管理常用的一些命令 用户管理 组管理 文件权限 给用户添加 sudo 权限 给用户添加 sudo 权限 首先先给出几个文件 / ...
- 微信小程序 scroll-view 完成上拉加载更多
我们经常在软件客户端上看到这么一个功能,当我们阅读信息浏览到文章的末尾时,通常会加载出更多的信息.比如,我们在简书客户端上浏览推荐文章时,浏览到屏幕的末尾,此时又加载出了另一页的推荐文章,即实现了上拉 ...
- 洛谷 P5665 [CSP-S2019] 划分
链接: P5665 题意: 给出 \(n\) 个整数 \(a_i\) ,你需要找到一些分界点 \(1 \leq k_1 \lt k_2 \lt \cdots \lt k_p \lt n\),使得 \( ...