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

题目描述

一个长度为 $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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下解压.tar.bz2文件

方式1&#xff1a; 4 teps&#xff1a; 1、bunzip2 <file>.tar.bz2 2、tar xf <file>.tar 3、cd /<file> 4、 ./configure 方式2&#xff1a; tar -jxvf <file>.tar.bz2

中医 西班牙语 PHP,php – MySql西班牙语字符数据

我有一个包含西班牙语字符的数据库.填充数据库我从客户端页面获取具有字符编码 UTF-8的值.当我在mySql数据库中插入值时,行包含更改的数据.例如,如果我插入’Mxico’,数据库中的条目是’M©xico’.这有什么影响,当我在指定’Mxico’的表上进行查询时,我得不到任何结果.我的…

oFono安装和启动

安装和启动oFono 1. git clone git://git.kernel.org/pub/scm/network/ofono/ofono.git 2. cd ofono 3. ./bootstrap-configure 或者./configure. configure过程中你可以需要装一些依赖包, 如&#xff1a; sudo apt-get install libudev-dev libdbus-1-dev libcap-ng-dev libto…

寻找三角形

在无向图中&#xff0c;如果三个不同的顶点之间都有边&#xff0c;则称他们组成了一个三角形。 在一张无向图 G 中&#xff0c;有且仅有一个三角形。现在你的任务是找到它。 输入格式 第一行两个数 $n, m$&#xff0c;表示 G 的顶点个数和边的条数。 接下来 $m$ 行&#xff0c;…

PHP封装curd,CURD · TookPHP开发手册 · 看云

## CURD* 开启 DEBUG 模式后&#xff0c;所有SQL语句均会在调试窗口显示&#xff0c;一目了然.[TOC]### find 单条查询通过 find 操作进行简单的单条查询操作。~~~//查找主键值为 18 的记录$db->find(18);~~~### all 查询(别名 select)通过 all 查找所有记录数 。~~~//查找表…

MemCache 分布式缓存

引用&#xff1a;http://baike.baidu.com/view/1193094.htm Memcache是一个高性能的分布式的内存对象缓存系统&#xff0c;通过在内存里维护一个统一的巨大的hash表&#xff0c;它能够用来存储各种格式的数据&#xff0c;包括图像、视频、文件以及数据库检索的结果等。简单的说…

全排列问题(递归)

上次上课老师讲了全排列算法&#xff0c;现在刚刚看自己的写的全排列算法&#xff0c;看了好一会才看懂。。。。 应该是自己理解的不够彻底 所以今天彻彻底底的来分析一下 先看图&#xff1a; 思路&#xff1a; 先固定一个字符&#xff0c;然后将固定的字符与它后面的每一个进行…

asp mysql 连接字符串,在ASP中连接数据库(连接字符串)

一、存取数据库的原理在ASP中&#xff0c;用来存取数据库的对象统称ADO对象(Active Data Objects)&#xff0c;主要含有三种对象&#xff1a;Connection、Recordset和Command&#xff0c;其中Connection负责打开或连接数据库&#xff0c;Recordset负责存取数据表&#xff0c;Co…

Windows 7/Vista 桌面上为何有两个隐含的 Desktop.INI

笔者今天在微软中文论坛看到有人又问起一个不算新问题的问题&#xff1a;当我们通过 Windows 7/Vista 的文件夹 选项设置允许显示隐含的文件后&#xff0c;会在 Windows 7/Vista 桌面上看到两个同名的 Desktop.INI 隐含文件&#xff1b; 而在 Windows XP 中允许显示隐含的文件却…

@Autowired @Resource @Inject 自动注入

一、AutoWired ( spring 的注解 )自动注入 /*** Autowired:* 默认按照 Student 类型去容器中找对应的组件:applicationContext.getBean(Student.class);* 如果找到多个相同类型的组件&#xff0c;再将 student 这个属性名作为 id 去容器中找对应组件 applicati…

峰Redis学习(8)Redis 持久化AOF方式

第三节&#xff1a;Redis 的持久化之AOF 方式       AOF方式&#xff1a;将以日志&#xff0c;记录每一个操作优势&#xff1a;安全性相对RDB方式高很多&#xff1b; 劣势&#xff1a;效率相对RDB方式低很多&#xff1b; 1&#xff09;AOF方式需要配置&#xff1a; # Ple…

移动web开发框架之我见

目前开发移动程序框架选择很多&#xff0c;从Web App&#xff0c;到PhoneGap&#xff0c;Titanium&#xff0c;MonoTouch&#xff0c;再到Native App&#xff0c;总有一款适合你。规律是&#xff0c;兼容性越强的技术&#xff0c;成本越低&#xff0c;性能越差&#xff1b;兼容…

php内核介绍及扩展开发指南,4.5. 发布扩展信息

发布扩展信息扩展可以发布 phpinfo() 或反射API要求的信息。我们一起来看一下。本章不会太长&#xff0c;因为真的很简单。MINFO( ) 挂钩如果声明了&#xff0c;一切都在声明的 MINFO() 挂钩中进行。如果未声明&#xff0c;则引擎将运行默认功能以打印有关扩展名的信息。该功能…

2011年度中国地区网络安全威胁大事记

2011年6月28日晚20时左右&#xff0c;新浪微博突然爆发“病毒”&#xff0c;大批用户中招&#xff0c;“中毒”用户点击恶意链接后便并自动关注一位名为hellosamy的用户&#xff0c;之后开始自动转发微博和私信好友来继续传播恶意地址。不少认证用户中招&#xff0c;也导致该“…

ansible模块介绍

ansible 默认提供了很多模块来供我们使用。在 Linux 中&#xff0c;我们可以通过 ansible-doc -l 命令查看到当前ansible 都支持哪些模块&#xff0c;通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。 下面介绍比较常用的几个模块 copy模块file模块cron模块gr…

matlab迭代次数,怎么知道程序中的迭代次数呢

function [result,x,y]TS_BS1(num_1,num_2,c_i,d_j,M_i,T)%初始参数设置runcount 0;tabulength 3 num_1;candidate.x round(rand(1,num_1));y zeros(num_1,num_2);sum_d 0;for i 1:num_2sum_d sum_d d_j(i);endalfa 0.9;%初始化禁忌表for i 1:tabulengthtabulist(i)…

使用a标签调用手机系统的一些小技巧(打电话、发短信)

拨打电话&#xff1a; <a href"tel:181181181181">call me!</a> 号码前加“”&#xff0c;表示国际号码 <a href"tel:110">110</a> 发送短信&#xff1a; <a href"sms:123456789">给123456789发短信</a> …

ecshop api.php,api.php

/*** ECSHOP OPEN API统一接口* * 版权所有 2005-2011 商派网络&#xff0c;并保留所有权利。* ecshop.com* ----------------------------------------------------------------------------* 这不是一个自由软件&#xff01;您只能在不用于商业目的的前提下对程序代码进行修改…

Ajax乱码解决方案

2019独角兽企业重金招聘Python工程师标准>>> 方案1: 页面端: <% page language"java" contentType"text/html; charsetgb2312" pageEncoding"gb2312"%> http://www.w3.org/TR/html4/loose.dtd"> Ajax: function ve…

关键词联想关联 php,ECSHOP商品关键词模糊分词搜索插件,商品列表关键字加红功能...

各位ECSHOP网店系统用户大家好&#xff0c;欢迎来到ECSHOP商品关键词模糊分词搜索商品列表关键字加红功能。最近给客户做一个ECSHOP商城&#xff0c;发现ECSHOP的模糊搜索要求太高&#xff0c;需要加入and、空格、加号等&#xff0c;客户搜索的时候不可能这样操作。考虑到工期的…