题目描述

小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙。

比如,时间回溯到了 2018 年 11 月 3 日。小 F 望着自己的任务清单:

  1. 看 iG 夺冠;
  2. 补月赛题的锅。

小 F 虽然经常咕咕咕,但他完成任务也是很厉害的,他一次性可以完成剩余任务的任一非空子集。比如,他现在可以选择以下几种中的一种:

  1. 看 iG 夺冠;
  2. 补月赛题的锅;
  3. 一边看 iG 夺冠的直播,一边补锅。

当然,比赛实在是太精彩了,所以小 F 就去看比赛了。

不过,当金雨从天而降、IG 举起奖杯之时,小 F 突然心生愧疚——锅还没补呢!于是,小 F 的内心产生了一点歉意。

这时小 F 注意到,自己总是在某些情况下会产生歉意。每当他要检查自己的任务表来决定下一项任务的时候,如果当前他干了某些事情,但是没干另一些事情,那么他就会产生一定量的歉意——比如,无论他今天看没看比赛,只要没有补完月赛的锅,他都会在选择任务的时候产生 11 点歉意。小 F 完成所有任务后,他这一天的歉意值等于他每次选择任务时的歉意之和。

过高的歉意值让小 F 感到不安。现在,小 F 告诉你他还有 nn 项任务,并告诉你在 mm 种情况中的一种 \mathrm{state}_istatei​ 的情况下,小 F 会产生 a_iai​ 点歉意。请你帮忙计算一下,小 F 在那一天所有可能的完成所有任务方式的歉意值之和是多少。

由于答案可能很大,你只需要输出答案对 998244353998244353 取模即可。

输入输出格式

输入格式:

输入一行两个整数 n, mn,m,表示有 nn 项任务,在 mm 种情况中下小 F 会产生歉意值。

输入接下来 mm 行,每行有一个长度为 nn 的 0-10−1 串 \mathrm{state}_istatei​ 和一个歉意值 a_iai​,\mathrm{state}_{i, j}statei,j​ 为 0/10/1 表示第 jj 项任务此时没做 / 已经做了。

详情请参考样例和样例解释。

输出格式:

输出一行一个整数,表示小 F 在那一天所有可能的完成任务方式的歉意值之和对 998244353998244353 取模的结果。

输入输出样例

输入样例#1: 复制

2 2
00 1
10 1
输出样例#1: 复制

4
输入样例#2: 复制

3 4
000 16
001 9
110 4
111 1
输出样例#2: 复制

260

说明

样例 1 解释:

0-10−1 串中第一个数字表示小 F 看没看比赛,第二个数字表示小 F 补没补锅。

我们用 \varnothing∅ 表示小 F 什么都没干,AA 表示小 F 看了比赛,BB 表示小 F 补了锅,那么所有会产生愧疚的方式如下:

\varnothing: 1∅:1
\{A\}:1{A}:1

那么所有可能的选择如下:

\varnothing\rightarrow\{A\}\rightarrow\{A,B\}:2∅→{A}→{A,B}:2
\varnothing\rightarrow\{B\}\rightarrow\{A,B\}:1∅→{B}→{A,B}:1
\varnothing\rightarrow\{A,B\}:1∅→{A,B}:1

所以答案是 2 + 1 + 1 = 42+1+1=4。

数据范围

保证出现的 \mathrm{state}_istatei​ 互不相同。

对于所有数据,有 1 \leq n \leq 201≤n≤20, 1 \leq m \leq \min(2 ^ n, 10 ^ 5), 1 \leq a_i \leq 10 ^ 51≤m≤min(2n,105),1≤ai​≤105。

题解

题意

首先给定$m$个长为$n$的串,和踩中每个需付的代价。

定义每次操作从$\underbrace{000....00}_{n}$开始,每步可以任选至少一个$0$变成$1$,当所有串变成$\underbrace{111....11}_{n}$时,操作结束。

在操作过程中,如果在某时刻序列和之前给定的序列相同,那么要付给定序列的代价。

问在这数不清的不同操作都做完之后(两次操作相同当且仅当变换过程完全相同),一共要付的代价,对$998244353$取模。

哇这个题真实的难读懂啊qwq

以下分析

先来考虑对于一个给定串$s$,有多少个操作(设为$ans$)会撞上它。

可以注意到,答案跟数字的位置无关,所以我们可以先把串抽象出来,数出有$c$个$1$,$(n-c)$个$0$。

那么这$c$个$1$,可能是由$c-1$个$1$的串转移而来,可能是$c-2,c-3......0$个$1$的串转移而来。

dp!

设$f[i]$为转移成$i$个$1$的方案数。

转移方程:$f[i]=\sum_{j=0}^{j-1}(f[j]*C_{i}^{j})$。

其中$C_i^j$是因为有$C_i^j$种方式从$j$个$1$转移成$i$个$1$。(在$i$个里面钦定$j$个为原有的$1$的方案数为$C_i^j$)

那么从$000.....0$转移到$s$的方案数就为$f[c]$。

而从$s$转移到$111.....1$的方案数可以倒着思考:从$111.....1$转移到$s$,有$(n-c)$个$1$变成了$0$对叭。

所以可以直接操起求过的$f$数组,从$s$转移到全$1$串的方案数就为$f[n-c]$。

然后用乘法原理乘起来,就得到了会经过串$s$的操作数,再乘上串$s$的单次代价就是这个串造成的总代价了。

最后把$m$个串的代价加起来就是答案。

 /*
qwerta
P4996 咕咕咕 Accepted
100
代码 C++,0.6KB
比赛 【LGR-055】洛谷11月月赛
提交时间 2018-11-04 11:58:31//下考前几十秒发现自己忘开long long,太真实了qwq
耗时/内存 108ms, 804KB
*/
#include<iostream>
#include<cstdio>
using namespace std;
#define LL long long//一年OI一场空,不开long long见祖宗
const int mod=;
LL f[];
char s[];
LL je(int x)//返回x!(因为20!没爆long long就直接乱搞了
{
LL ans=;
while(x)
{
ans*=x;
x--;
}
return ans;
}
LL C(int q,int w)//返回C(q,w)
{
return je(q)/je(w)/je(q-w);
}
int main()
{
ios::sync_with_stdio(false);
int n,m;
cin>>n>>m;
f[]=;//初始化
//先把f预处理出来
for(int i=;i<=n;++i)
{
for(int j=;j<i;++j)
{
f[i]+=C(i,j)*f[j]%mod;
f[i]%=mod;
}
}
LL ans=;
for(int i=;i<=m;++i)
{
cin>>s;
int c=;//c为s中1的个数
for(int j=;j<n;++j)
c+=s[j]-'';
int v;//这个串的单次代价
cin>>v;
ans+=(LL)f[c]*f[n-c]%mod*v%mod;
ans%=mod;
}
cout<<ans;
return ;
}

「P4996」「洛谷11月月赛」 咕咕咕(数论的更多相关文章

  1. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  2. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  3. 洛谷11月月赛(284pts rank85)

    https://www.luogu.org/contestnew/show/12006 我是比赛完后在去写的 这是我第一次打洛谷月赛,之前一次是比赛完才去看而且写了第一题就没写后面的了 284分,太水 ...

  4. 洛谷11月月赛round.1

    太感动了#2 thwfhk 240 (801ms) 100 100 40   又一张明信片,话说10月的怎么还没收到   P2246 SAC#1 - Hello World(升级版) 题目背景 一天, ...

  5. 洛谷11月月赛题解(A-C)

    心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...

  6. 洛谷11月月赛round.2

    P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...

  7. NOIP模拟赛(洛谷11月月赛)

    T1  终于结束的起点 题解:枚举啊... 斐波那契数 第46个爆int,第92个爆long long.... 发现结果一般是m的几倍左右....不用担心T. #include<iostream ...

  8. 【CSGRound2】逐梦者的初心(洛谷11月月赛 II & CSG Round 2 T3)

    题目描述# 给你一个长度为\(n\)的字符串\(S\). 有\(m\)个操作,保证\(m≤n\). 你还有一个字符串\(T\),刚开始为空. 共有两种操作. 第一种操作: 在字符串\(T\)的末尾加上 ...

  9. 最大字段和&洛谷11月月赛DIV2 T1

    蒟蒻只能打一打DIV2的基础题 太卑微了 这道题的本质其实是再建一个数组,如果s串i位置是0那么就给a[i]赋值为1,表示要累加个数,如果是1那么就把a[i]赋值为-1,表示个数减一,最后求最大子段和 ...

随机推荐

  1. 获取input光标的x和y轴

    http://blog.csdn.net/kingwolfofsky/article/details/6586029 index.html <!DOCTYPE html> <html ...

  2. 智能手机的耗电特征及APP耗电量测试的两种方法

    文章陈述了手机发展趋势及耗电特性,集中讨论了时下最为关心的智能手机耗电问题,并介绍了测量手机软件耗电量的两种方法.此外还解释了为何运营商此前会提出收取微信的费用,心跳机制是什么. 美国著名手机公司Pa ...

  3. ios - UISearchBar输入框背景色

    //输入框背景色 bar.searchBarStyle = UISearchBarStyleMinimal; [bar positionAdjustmentForSearchBarIcon:UISea ...

  4. python 基础 5.2 类的继承

    一. 类的继承 继承,顾名思议就知道是它的意思,举个例子说明,你现在有一个现有的A类,现在需要写一个B类,但是B类是A类的特殊版,我们就可以使用继承,B类继承A类时,B类会自动获得A类的所有属性和方法 ...

  5. maven scope runtime

    https://blog.csdn.net/ningbohezhijunbl/article/details/25818069 There are 6 scopes available: compil ...

  6. SPOJ LCS2 - Longest Common Substring II 后缀自动机 多个串的LCS

    LCS2 - Longest Common Substring II no tags  A string is finite sequence of characters over a non-emp ...

  7. HTML5(石头剪刀布游戏开发)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. 转换(旋转)transform

    div { transform:rotate(180deg); -ms-transform:rotate(180deg); /* IE 9 */ -moz-transform:rotate(180de ...

  9. matlab vs使用

    ~ matlab无论什么程序只输出 ans 1 注意matlab命名规则:1不能与matlab内部函数名字重合.2.文件名首字母不能是数字或下划线.3.文件名中不能有空格.4.文件名不能太长.5注意大 ...

  10. 开发的第一个PHP扩展

    下载php源码php-5.4.23.tar.gz,解压,进入/home/hubo/php-5.4.23/ext/扩展目录 wget http://cn2.php.net/get/php-5.4.23. ...