【hdu多校联考第二场】Odd Shops
Description
这道题的题意是这道难读,大概就是给你n个商店,每个商店的重量为i的商品用ai表示,对于任意商店的a数列都是相同的,重量的范围为[1,10]
求购买方案总数为奇数的重量一共有多少种,答案取膜998244353
Input Format
多组数据,每组数据第一行一个整数n表示一共有n个商店,第二行10个整数表示数列a
Output Format
对于每组数据输出一行表示答案
Sample Input
1
1 2 3 4 5 6 7 8 9 10
2
1 0 0 0 0 0 0 0 0 0
100
1 1 1 1 0 0 0 0 0 0
Sample Output
Solution
打算学习一下god们的题解风格
这道题目,首先答案显然为${(1 + \sum\limits_{i = 1}^{10} {{a_i}*{x^i}} )^n}$中系数为奇数的项有几个
那么我们只要对该式进行处理就行了
首先我们设关注到题目要求统计的是系数为奇数,那么相当于在mod 2意义下进行运算
我们现在来考虑一个子问题,$f{\left( n \right)^{2k}}*g\left( n \right)$中有几个系数为奇数
对于该式,我们意识到前一个式子是${(f{\left( n \right)^k})^2}$因为是平方,所以打开之后两项相乘的系数就会消掉
例如${\left( {a + b} \right)^2} = {a^2} + {b^2} + 2ab$最后一项对答案显然没有贡献,也就是说平方后我们关心的只是一个与原串相同的串
对于g(n),我们将其拆分成g(n)=o(n)+e(n),o(n)为g(n)中奇数次方的项,e(n)为g(n)中偶数次方的项,由于${(f{\left( n \right)^k})^2}$只剩下平方项,所以o(n)与e(n)对答案的贡献是独立的
那么最后一步就是递归拆分后递归求解这个问题,顺便加个map瞎记忆化一下就过了
为什么我们要进行这个拆分呢?
我们可以很快发现这样拆分之后递归求解的时候o(n)和e(n)的项数就可以从20降为10,这样就可以将一个${10^{10}}$项的多项式希望得到的结果,只用10位的二进制数得到答案
题解是这么想,代码也确实是这么打,但是这个代码还是比较巧妙的(我本来以为要fft的,后来看了标程才明白,确实我觉得不用开ll,大家可以尝试一下)
代码啦~~~
#include<cstdio>
#include<map>
#include<algorithm>
#define ll long long
using namespace std;
map<pair<ll,ll>,ll> mp;
ll mo=,x;
ll mul(ll a,ll b){
ll ret=;
while (b){
ret^=a*(b&(-b)),b-=b&(-b);
}
return ret;
}
ll f(ll n,ll g){
if (mp.count(make_pair(n,g)))return mp[make_pair(n,g)];
ll &ret=mp[make_pair(n,g)];
if (!n)return ret=__builtin_popcountll(g)%mo;
if ((n&))g=mul(g,x);ll a=,b=;
for (int i=;i<=;i++)if ((g&(<<i))){
if ((i&))a|=(<<(i>>));
else b|=(<<(i>>));
}
return ret=(f(n>>,a)+f(n>>,b))%mo;
}
int a[],n;
int main(){
while (~scanf("%d",&n)){
mp.clear();
x=;
for (int i=;i<=;i++){
scanf("%d",&a[i]);
if ((a[i]&))x|=(<<i);
}
ll ans=f(n,);
printf("%d\n",ans);
}
}
【hdu多校联考第二场】Odd Shops的更多相关文章
- 【赛时总结】NOIP2018-三校联考1024
◇NOIP三校联考-1024◇ 发现以前的博客写得似乎都很水……基本上都没什么阅读量QwQ 决定改过自新╰( ̄ω ̄o) 就从这篇博客开始吧~ 现场考得无地自容,看到题解才发现一些东西……(我第三题还没 ...
- [多校联考2019(Round 5 T2)]蓝精灵的请求(二分图染色+背包)
[多校联考2019(Round 5)]蓝精灵的请求(二分图染色+背包) 题面 在山的那边海的那边住着 n 个蓝精灵,这 n 个蓝精灵之间有 m 对好友关系,现在蓝精灵们想要玩一个团队竞技游戏,需要分为 ...
- 三校联考 Day3
三校联考 Day3 大水题 题目描述:给出一个圆及圆上的若干个点,问两个点间的最远距离. solution 按极角排序,按顺序枚举,显然距离最远的点是单调的,线性时间可解出答案. 大包子的束缚 题目描 ...
- 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?
牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- [2019多校联考(Round 6 T3)]脱单计划 (费用流)
[2019多校联考(Round 6 T3)]脱单计划 (费用流) 题面 你是一家相亲机构的策划总监,在一次相亲活动中,有 n 个小区的若干男士和 n个小区的若干女士报名了这次活动,你需要将这些参与者两 ...
- [多校联考2019(Round 5 T1)] [ATCoder3912]Xor Tree(状压dp)
[多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值 ...
- [多校联考2019(Round 5 T3)]青青草原的表彰大会(dp+组合数学)
[多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献 ...
- 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你
[五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...
随机推荐
- 接龙游戏(codevs 1051)
1051 接龙游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 给出了N个单词,已经按长度排好了序 ...
- Network(poj 3694)
题意:一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(注意是要考虑之前连了的边,每次回答是在上一次的基础之上) /* tarjan+LCA 先用ta ...
- android源码编译时拷贝替换指定文件
由于要做版本定制,某些版本的资源文件等(例如style.xml)需要不同的配置,但是android的编译开关无法在xml里使用,于是想到了编译时根据不同的编译开关编译不同的文件,如下: 1.建立A.x ...
- Ftp启动与关闭
//启动 service vsftpd start //关闭 service vsftpd stop 查看进程 ps -ef | grep ftp root : ? :: /usr/sbin/vsft ...
- Linux下汇编语言学习笔记34 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- SOJ 3531_Number Pyramids
[题意]给定一个数top及最底层元素个数n,构成一个以给top为塔尖,层数为n的如杨辉三角的金字塔,求有多少种 [分析]最终种数其实只与最底层的n个数的组合数有关,上层的每个都数是由最底层数相加得来 ...
- Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询
Android GIS开发系列-- 入门季(5),这篇文章中,我们知道如何去查找要素.现在有一个需求,查找某点5000米范围的要素,那如何来做呢?首先我们需要在地图上画个5000米半径的圆,然后根据Q ...
- Cts框架解析(2)-cts调试环境的搭建
上一篇文章中说了怎样在windows搭建cts以及执行cts进行測试.这篇文章来讲讲怎样在eclipse中配置源代码,进行debug调试. 下载 cts源代码地址:https://android.go ...
- 多路转接模型之poll
poll系统调用和select类似.也是在指定时间内轮询一定数量的文件描写叙述符,以測试当中是否有就绪者.poll和select效率差点儿相同,仅仅是其使用接口相对简单些,poll不在局限于1024个 ...
- python内置全局变量
vars()查看内置全局变量 以字典方式返回内置全局变量 #!/usr/bin/env python # -*- coding:utf8 -*- print(vars()) #输出 # {'__bui ...