题目描述

一个长度为 $n$ 的序列,每个位置为 $0$ 或 $1$ 两种。现在给出 $m$ 个限制条件,第 $i$ 个限制条件给出 $x_i$ 、$y_i$ ,要求至少满足以下两个条件之一:

  • 序列的前 $x_i$ 个位置中,恰好有 $y_i$ 个 $1$ ;
  • 序列的后 $y_i$ 个位置中,恰好有 $x_i$ 个 $1$ ;

求有多少个序列满足所有限制条件。答案可能很大,只需要输出它对 $998244353$ 取模后的结果即可。


题解

组合数+乱搞

显然当 $x>y$ 时条件为前缀限制,$x<y$ 时条件为后缀限制。

既有前缀限制,又有后缀限制的情况下,我们枚举总共1的个数,把后缀限制转化为前缀限制。

如果所有限制均有 $x\ne y$ 则可以直接使用组合数计算。预处理组合数,单次计算的时间复杂度是 $O(n)$ 的。

当有 $x=y$ 时,显然只需要考虑所有 $x=y$ 限制中 $x$ 最大的限制即可,总方案数为 满足前缀+满足后缀-满足前缀和后缀。

时间复杂度 $O(n^2)$ 。

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 1010
#define M 5010
#define mod 998244353
using namespace std;
int n , ax[N] , ay[N] , at , bx[N] , by[N] , bt , c[M][M] , v[M];
int solve(int x)
{int i , last = 0 , ans = 1;memset(v , -1 , sizeof(v));v[0] = 0 , v[n] = x;for(i = 1 ; i <= at ; i ++ ){if(v[ax[i]] != -1 && v[ax[i]] != ay[i]) return 0;v[ax[i]] = ay[i];}for(i = 1 ; i <= bt ; i ++ ){if(v[n - bx[i]] != -1 && v[n - bx[i]] != x - by[i]) return 0;v[n - bx[i]] = x - by[i];}for(i = 1 ; i <= n ; i ++ ){if(v[i] != -1){if(v[i] < v[last]) return 0;ans = 1ll * ans * c[i - last][v[i] - v[last]] % mod , last = i;}}return ans;
}
int main()
{int T;scanf("%d" , &T);while(T -- ){at = bt = 0;int m , i , j , x , y , p = 0 , mx = 0 , ans = 0;scanf("%d%d" , &n , &m);for(i = 1 ; i <= m ; i ++ ){scanf("%d%d" , &x , &y) , mx = max(mx , min(x , y));if(x > y) ax[++at] = x , ay[at] = y;else if(x < y) bx[++bt] = y , by[bt] = x;else p = max(p , x);}c[0][0] = 1;for(i = 1 ; i <= n ; i ++ ){c[i][0] = 1;for(j = 1 ; j <= i ; j ++ )c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;}for(i = mx ; i <= n ; i ++ ){at ++ , ax[at] = ay[at] = p , ans = (ans + solve(i)) % mod;bt ++ , bx[bt] = by[bt] = p , ans = (ans - solve(i) + mod) % mod;at -- , ans = (ans + solve(i)) % mod , bt -- ;}printf("%d\n" , ans);}return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/8681422.html

【uoj#209】[UER #6]票数统计 组合数+乱搞相关推荐

  1. 【uoj#142】【UER #5】万圣节的南瓜灯 乱搞+并查集

    题目描述 给出一张 $n\times m$ 的网格图,两个格子之间有一条双向边,当且仅当它们相邻,即在网格图中有一条公共边. 特殊地,对于 $1\le x\le n​$ ,$(x,1)​$ 和 $(x ...

  2. [UOJ#245][UER#7B]天路

    Description 给出n个数,对于每个k(2<=k<=n),求出最大的一个ans,使得存在一个连续的长度为k的区间中最大值和最小值的差为ans. 答案与标准答案的误差不超过5%即为正 ...

  3. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

    3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 367  Solved: 159 [Submit][Status ...

  4. BZOJ4401:块的计数(乱搞)

    Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构--块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...

  5. Luogu3732 [HAOI2017] 供给侧改革 【后缀数组】【线段树】【乱搞】

    题目分析: 这道题我是乱搞的,因为他说$01$串是随机的. 那么我们可以猜测能够让LCP变大的地方很少.求出后缀数组之后可能让LCP变大的地方就等价于从大到小往height里动态加点同时维护这个点左右 ...

  6. 【NOI2018】你的名字【后缀自动机】【可持久化线段树合并】【乱搞】

    题意:给一个串 SSS,qqq 次询问,每次给定串 TTT 和 l,rl,rl,r ,求有多少个本质不同的串是 TTT 的子串而不是 Sl-rS_{l\dots r}Sl-r​ 的子串. ∣S∣≤5× ...

  7. 【蓝桥杯官网试题 - 算法训练 】P0502(乱搞,tricks)

    题干: 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两个 ...

  8. 【bitset乱搞】BZOJ3687 简单题

    题面在这里 最喜欢这种乱搞题了 因为异或两次就等于没有异或 所以只需要记录不同算术和的奇偶即可 用一个bitset存 假设已经统计好了前面一部分算术和,新加一个x 那么每个数加x或不加,新的bitse ...

  9. 洛谷P3939 数颜色 vector乱搞

    洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...

最新文章

  1. 主角有智能芯片的种田小说_推荐3本克苏鲁类小说,压抑邪恶与搞笑逗乐并存,看看是你的菜吗...
  2. 小程序中textarea层级最高的结局办法
  3. js实现图片上传预览及进度条
  4. [poj3321]Apple Tree_dfs序_树状数组
  5. 后端学 Angular 2 —— 组件间通信
  6. linux查看文件时显示行号,linux中查看文件时显示行号
  7. 《连线》杂志专访李彦宏:百度all in AI 欲引领智能革命
  8. 借助离散数学解决“哈弗大学智商测试”一题 --编程算法
  9. 【三维装箱】基于matlab求解三维装箱优化问题【含Matlab源码 949期】
  10. matlab实现m-k突变的,用matlab进行mk趋势分析与突变检验.pdf
  11. 谷歌应用程序无法启动,因为应用程序的并行配置不正确的问题解决方案
  12. linux命令ftps,Linux下FTP服务器应用之FTPS(FTP+SSL)
  13. (一)数字图像处理基础知识点
  14. Ansiable批量管理工具
  15. window10家庭版安装docker记录
  16. 一个acmer的感悟
  17. 图像四则运算(加减乘除)
  18. 如何高效进行大规模分类?
  19. 微信公众平台测试帐号申请最新地址
  20. Atari 2600 新书:主机游戏的一次黎明冒险

热门文章

  1. Eclipse变量名自动补全问题 自定义上屏按键为TAB
  2. 学习vue.js 第一天
  3. Courses hdu 1083(匹配)
  4. javascript this指针指向?
  5. poj 3258 River Hopscotch 【二分】
  6. 一步步学习微软InfoPath2010和SP2010--第十三章节--SharePoint视图和仪表板(9)--基于表单库的仪表板...
  7. 百万级并发 Node.js也能行
  8. Android高效开发:
  9. 设计模式C++学习笔记之十三(Decorator装饰模式)
  10. dnn中个性化服务的使用