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

  6
  2
  35

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的更多相关文章

  1. 【赛时总结】NOIP2018-三校联考1024

    ◇NOIP三校联考-1024◇ 发现以前的博客写得似乎都很水……基本上都没什么阅读量QwQ 决定改过自新╰( ̄ω ̄o) 就从这篇博客开始吧~ 现场考得无地自容,看到题解才发现一些东西……(我第三题还没 ...

  2. [多校联考2019(Round 5 T2)]蓝精灵的请求(二分图染色+背包)

    [多校联考2019(Round 5)]蓝精灵的请求(二分图染色+背包) 题面 在山的那边海的那边住着 n 个蓝精灵,这 n 个蓝精灵之间有 m 对好友关系,现在蓝精灵们想要玩一个团队竞技游戏,需要分为 ...

  3. 三校联考 Day3

    三校联考 Day3 大水题 题目描述:给出一个圆及圆上的若干个点,问两个点间的最远距离. solution 按极角排序,按顺序枚举,显然距离最远的点是单调的,线性时间可解出答案. 大包子的束缚 题目描 ...

  4. 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?

    牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...

  5. 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)

    2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...

  6. [2019多校联考(Round 6 T3)]脱单计划 (费用流)

    [2019多校联考(Round 6 T3)]脱单计划 (费用流) 题面 你是一家相亲机构的策划总监,在一次相亲活动中,有 n 个小区的若干男士和 n个小区的若干女士报名了这次活动,你需要将这些参与者两 ...

  7. [多校联考2019(Round 5 T1)] [ATCoder3912]Xor Tree(状压dp)

    [多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值 ...

  8. [多校联考2019(Round 5 T3)]青青草原的表彰大会(dp+组合数学)

    [多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献 ...

  9. 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你

    [五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...

随机推荐

  1. Vue 实例以及生命周期

    最简单的 Vue 实例 //html <div id="app"> {{message}} </div> //javascript var vm = new ...

  2. [K/3Cloud] 动态表单打开时传递一个自定义参数并在插件中获取

    插件中在调用动态表单时,通过DynamicFormShowParameter的CustomParams,增加自定义的参数. /// <summary> /// 库存查询 /// </ ...

  3. Kafka 生产消费 Avro 序列化数据

    https://unmi.cc/kafka-produce-consume-avro-data/ https://unmi.cc/apache-avro-serializing-deserializi ...

  4. Less Time, More profit 最大权闭合子图(最大流最小割)

    The city planners plan to build N plants in the city which has M shops. Each shop needs products fro ...

  5. Linux下重启加载命令

    nginx -s reload

  6. 技术杂记之:在阿里云centos7上部署JDK MYSQL TOMCAT

    今日小编闲来无事,乘着公司新项目即将上线之际,在阿里云上整了一台centos作为测试机.原本以为一个小时搞定,结果还是花了一点小小时间.不管怎么说,记录下来,给各位小白当成课后甜点吧. 价格 先上价格 ...

  7. mysql性能调优——Query优化

    上节谈了关于mysql锁定机制的优化方案,下面来谈一下Query优化——Mysql Query Optimizer 当Mysql Query Optimizer接受到从Query Parser过来的Q ...

  8. 前端自动化测试工具--使用karma进行javascript单元测试(转)

    Karma+Jasmine+PhantomJS组合的前端javascript单元测试工具. 1.介绍 Karma是由Google团队开发的一套前端测试运行框架,karma会启动一个web服务器,将js ...

  9. php-7.1编译记录

    编译php-7.1.28步骤 检查环境 ./configure \ --prefix=/u01/server/php-7.1.28 \ --enable-fpm \ --with-fpm-user=d ...

  10. js中的封装、继承、多态

    Javascript是一门解释型的语言,是基于对象的,并不是真正的面向对象的语言,对变量类型的应用也是宽松的,其实它同样可以模拟面向对象的功能:  1 function myfun1(){  2    ...