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. Flask(2):登陆验证

    装饰器补充: import functools def auth(func): @functools.wraps(func) # 作用:把原函数的原信息封装到 inner 中 def inner(*a ...

  2. android listVIew实现button按钮监听程序

    1.重写simpleAdapter 方法@Override public HashMap<String,String> getItem(int position) { // TODO Au ...

  3. PHP上传文件限制修改

    php.ini里面查看如下行: upload_max_filesize post_max_size memory_limit

  4. Delphi第三方控件安装方式

    由于组件提供的方式不同,所以安装的方法也是不一样的,下面就目前常见的各种形式的组      件的安装方法介绍一下.             1只有一个DCU文件的组件.DCU文件是编译好的单元文件,这 ...

  5. JFinal Weixin 微信极速 SDK

    原文:https://git.oschina.net/jfinal/jfinal-weixin

  6. 基于Wi-Fi的HID注射器,利用WHID攻击实验

    WHID代表基于 Wi-Fi 的 HID 注射器,即对 HID 攻击进行无线化攻击的一种注入工具. 实验攻击原理如下图: 攻击者使用ESP8266作为AP,在自己的电脑创建客户端连接AP.在客户端键入 ...

  7. 子元素设置margin-top,父元素也受影响

    这个问题困惑了非常久.尽管没有大碍早就摸出来怎么搞定它.但始终不明确原因出在哪里,假设仅仅是IE有问题我也不会太在意.可问题是全部上等浏览器都表现如此,这样叫我怎能安心?今天总算下狠心查出来怎么回事, ...

  8. Java Longest Palindromic Substring(最长回文字符串)

    假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...

  9. android 特殊符号开头的联系人归并至“#”下

    在PeopleActivity界面.联系人的显示位置是由其display name的第一个字符决定的. 数字开头的联系人会显示在"#"这个header下. 中英文联系人会显示在&q ...

  10. [DLX+bfs] hdu 4069 Squiggly Sudoku

    题意: 给你9*9的矩阵.对于每一个数字.能减16代表上面有墙,能减32代表以下有墙. .. 最后剩下的数字是0代表这个位置数要求,不是0代表这个数已知了. 然后通过墙会被数字分成9块. 然后做数独, ...