当前位置: 首页 > news >正文

Emiya 家今天的饭C++

题目:

 

 


样例解释:

【样例 1 解释】

由于在这个样例中,对于每组 i,j,Emiya 都最多只会做一道菜,因此我们直接通过给出烹饪方法、主要食材的编号来描述一道菜。

符合要求的方案包括:

  • 做一道用烹饪方法 1、主要食材 1 的菜和一道用烹饪方法 2、主要食材 2 的菜
  • 做一道用烹饪方法 1、主要食材 1 的菜和一道用烹饪方法 2、主要食材 3 的菜
  • 做一道用烹饪方法 1、主要食材 3 的菜和一道用烹饪方法 2、主要食材 2 的菜

因此输出结果为 3mod998,244,353=3。 需要注意的是,所有只包含一道菜的方案都是不符合要求的,因为唯一的主要食材在超过一半的菜中出现,这不满足 Yazid 的要求。

【样例 2 解释】

Emiya 必须至少做 2 道菜。

做 2 道菜的符合要求的方案数为 100。

做 3 道菜的符合要求的方案数为 90。

因此符合要求的方案数为 100 + 90 = 190。

 


思路:

首先考虑列的限制,发现若有不合法的列,则必然有且只有一列是不合法的:因为不可能有不同的两列数量都超过总数的一半。

于是发现列的限制容易容斥计算:每行选不超过一个的方案数 - 每行选不超过一个,且某一列选了超过一半的方案数。

那么考虑枚举不合法的一列。假设我们已经枚举了不合法的列为colcol,接下来会发现我们只关心一个数的位置是否在当前列;如果属于在其他列的情况,那么它具体在哪一列对当前列的合法性并无影响,我们并不需要考虑。

接下来设计状态。fi,j,kfi,j,k​表示对于colcol这一列,前ii行在colcol列中选了jj个,在其他列中选了kk个,那么令sisi​为第ii行的总和,则有转移:

fi,j,k=fi−1,j,k + ai,col∗fi−1,j−1,k + (si−ai,col)∗fi−1,j,k−1fi,j,k​=fi−1,j,k​ + ai,col​∗fi−1,j−1,k​ + (si​−ai,col​)∗fi−1,j,k−1​

状态数O(n3)O(n3),转移O(1)O(1),算上枚举colcol,这一步复杂度是O(mn3)O(mn3)的。统计如下和式的值并对每一列求和即可得到不合法的方案数:

∑j>kfn,j,kj>k∑​fn,j,k​

接下来考虑计算总方案数:和之前相似,只需设gi,jgi,j​为前ii行共选了jj个数的方案数,则有转移:

gi,j=gi−1,j + si∗gi−1,j−1gi,j​=gi−1,j​ + si​∗gi−1,j−1​

那么∑i=1ngn,ii=1∑n​gn,i​就是总方案数, 这一步是O(n2)O(n2)的。所以现在可以在O(mn3)O(mn3)的总复杂度内完成这题,获得84分。

考虑进一步优化,剪去无用状态:注意到在不合法情况的计算过程中,也就是fi,j,kfi,j,k​的转移过程中,我们实际上并不关心j,kj,k的具体数值,而只关心相对的大小关系;所以我们可以将状态变为fi,jfi,j​,表示前ii行,当前列的数比其他列的数多了jj个,则有转移:

fi,j=fi−1,j + ai,col∗fi−1,j−1 + (si−ai,col)∗fi−1,j+1fi,j​=fi−1,j​ + ai,col​∗fi−1,j−1​ + (si​−ai,col​)∗fi−1,j+1​

转移仍然是O(1)O(1)的,但总复杂度降为O(mn2)O(mn2),可以通过此题。

 


代码:

1.

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;typedef long long ll;
const int Maxn = 100;
const int Maxm = 2000;
const int Mod = 998244353;int N, M;
int A[Maxn + 5][Maxm + 5];
int sum[Maxn + 5];ll f[Maxn + 5][Maxn * 2 + 5];
ll Solve(int typ) {for(int i = 0; i <= N; i++)for(int j = 0; j <= N * 2; j++)f[i][j] = 0;f[0][N] = 1;for(register int i = 0; i < N; i++)for(register int j = 0; j <= N * 2; j++) {if(j) f[i + 1][j - 1] = (f[i + 1][j - 1] + f[i][j]* (sum[i + 1] - A[i + 1][typ]) % Mod) % Mod;f[i + 1][j] = (f[i + 1][j] + f[i][j]) % Mod;f[i + 1][j + 1] = (f[i + 1][j + 1] + f[i][j]* A[i + 1][typ] % Mod) % Mod;}ll ret = 0;for(int i = N + 1; i <= N * 2; i++)ret = (ret + f[N][i]) % Mod;return ret;
}int main() {
#ifdef LOACLfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifscanf("%d %d", &N, &M);for(int i = 1; i <= N; i++)for(int j = 1; j <= M; j++)scanf("%d", &A[i][j]);ll ans = 1;for(int i = 1; i <= N; i++) {for(int j = 1; j <= M; j++)sum[i] = (sum[i] + A[i][j]) % Mod;ans = ans * (sum[i] + 1) % Mod;}ans = (ans - 1 + Mod) % Mod;for(register int i = 1; i <= M; i++)ans = (ans - Solve(i) + Mod) % Mod;printf("%lld\n", ans);return 0;
}

2.

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define mod 998244353using namespace std;
typedef long long ll;
const int MAXN = 105, MAXM = 2005;
int n,m,a[MAXN][MAXM],sum[MAXN][MAXM];
ll f[MAXN][MAXN*2],g[MAXN][MAXN];int main()
{cin >> n >> m;for(int i = 1; i<=n; i++)for(int j = 1; j<=m; j++){scanf("%d",&a[i][j]);sum[i][0] = (sum[i][0]+a[i][j])%mod;}for(int i = 1; i<=n; i++)for(int j = 1; j<=m; j++)sum[i][j] = (sum[i][0]-a[i][j]+mod)%mod;ll ans = 0;for(int col = 1; col<=m; col++){memset(f,0,sizeof(f));f[0][n] = 1;for(int i = 1; i<=n; i++)for(int j = n-i; j<=n+i; j++) f[i][j] = (f[i-1][j]+f[i-1][j-1]*a[i][col]%mod+f[i-1][j+1]*sum[i][col]%mod)%mod;for(int j = 1; j<=n; j++)ans = (ans+f[n][n+j])%mod;}g[0][0] = 1;for(int i = 1; i<=n; i++)for(int j = 0; j<=n; j++) g[i][j] = (g[i-1][j]+(j>0?g[i-1][j-1]*sum[i][0]%mod:0))%mod;for(int j = 1; j<=n; j++)ans = (ans-g[n][j]+mod)%mod;  cout << ans*(mod-1)%mod << endl;return 0;
}

 

 

相关文章:

Emiya 家今天的饭C++

题目&#xff1a; 样例解释&#xff1a; 【样例 1 解释】 由于在这个样例中&#xff0c;对于每组 i,j&#xff0c;Emiya 都最多只会做一道菜&#xff0c;因此我们直接通过给出烹饪方法、主要食材的编号来描述一道菜。 符合要求的方案包括&#xff1a; 做一道用烹饪方法 1、主要…...

Mybatis缓存机制(图文并茂!)

目录 一级缓存 需求我们在一个测试中通过ID两次查询Monster表中的信息。 二级缓存 案例分许(和上述一样的需求) EhCache第三方缓存 在了解缓存机制之前&#xff0c;我们要先了解什么是缓存&#xff1a; ‌缓存是一种高速存储器&#xff0c;用于暂时存储访问频繁的数据&…...

Git 工作区、暂存区和版本库

Git 工作区、暂存区和版本库 Git 是一个强大的版本控制系统&#xff0c;它帮助开发者管理代码历史&#xff0c;协作开发&#xff0c;以及跟踪和合并更改。为了更好地理解 Git 的工作流程&#xff0c;我们需要了解 Git 中的三个核心概念&#xff1a;工作区&#xff08;Workspac…...

SSH 远程连接到 Linux 服务器上的 SQLite

通过 SSH 远程连接到 Linux 服务器上的 SQLite 数据库文件的流程&#xff0c;可以分为以下几个步骤&#xff1a; 通过 SSH 连接到远程 Linux 服务器。在远程服务器上执行 SQLite 命令行工具&#xff0c;操作数据库文件。在本地使用工具&#xff0c;通过 SSH 隧道间接访问远程的…...

使用ElasticSearch-dump工具进行ES数据迁移、备份

elasticsearch-dump基本使用 该工具基于第三方Elasticdump工具来实现&#xff0c;仓库地址&#xff1a;https://github.com/elasticsearch-dump/elasticsearch-dump/tree/master&#xff0c;用于更加快捷方便的将Elasticsearch不同集群的数据进行索引备份和还原。 一、安装 …...

SpringMVC源码-SpringMVC源码请求执行流程及重点方法doDispatch讲解

一、开始请求 在浏览器访问http://localhost:8080/spring_mymvc/userlist这个接口&#xff0c;是个get请求。 FrameworkServlet类的service方法会被请求到: 调用路径如下&#xff1a; service:945, FrameworkServlet (org.springframework.web.servlet) service:764, HttpSer…...

《深度学习》OpenCV 指纹验证、识别

目录 一、指纹验证 1、什么是指纹验证 2、步骤 1&#xff09;图像采集 2&#xff09;图像预处理 3&#xff09;特征提取 4&#xff09;特征匹配 5&#xff09;相似度比较 6&#xff09;结果输出 二、案例实现 1、完整代码 2、实现结果 调试模式&#xff1a; 三、…...

爬虫入门之爬虫原理以及请求响应

爬虫入门之爬虫原理以及请求响应 爬虫需要用到的库, 叫requests. 在导入requests库之前, 需要安装它, 打开cmd: 输入pip install 库名 pip install requests后面出现successful或requirement already就说明已经下载成功了!!! 下载出现的问题: 1.有报错或者是下载慢 修改镜像…...

CTF ciscn_2019_web_northern_china_day1_web1复现

ciscn_2019_web_northern_china_day1_web1 复现&#xff0c;环境源于CTFTraining 分析 拿到题目扫描&#xff0c;发现没有什么有用资产 扫描过程中注册账号登录&#xff0c;发现上传入口 上传文件&#xff0c;发现下载删除行为&#xff0c;寻找功能点&#xff0c;发现不能访问…...

docker命令汇总

Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 以下是一些常用的 Docker 命令…...

云计算在现代企业中的应用与优势

云计算在现代企业中的应用与优势 随着信息技术的飞速发展&#xff0c;云计算已经成为现代企业不可或缺的一部分。作为一种创新的计算模式&#xff0c;云计算为企业提供了前所未有的灵活性和可扩展性&#xff0c;极大地推动了企业的数字化转型。 一、云计算的基本概念 云计算…...

Android平台GB28181实时回传流程和技术实现

规范解读 GB28181 中的 “INVITE” 是会话初始协议&#xff08;SIP&#xff09;中的一种请求方法&#xff0c;主要用于邀请一个或多个参与者加入特定的会话。在 GB28181 标准中&#xff0c;“INVITE” 请求通常用于发起媒体流的传输请求。当一个设备想要接收来自另一个设备的媒…...

Text-to-SQL方法研究

有关Text-to-SQL实现细节&#xff0c;可以查阅我的另一篇文章text-to-sql将自然语言转换为数据库查询语句 1、面临的挑战 自然语言问题往往包含复杂的语言结构,如嵌套语句、倒装句和省略等,很难准确映射到SQL查询上。此外,自然语言本身就存在歧义,一个问题可能有多种解读。消除…...

【Router】路由功能之MAC地址过滤(MAC Filter)功能介绍及实现

MAC地址过滤(MAC Filter) MAC 地址过滤是一种网络安全技术,通过在网络设备(如路由器)上设置规则,允许或阻止特定 MAC 地址的设备连接到网络。其主要作用是增强网络的安全性,防止未经授权的设备接入网络。 MAC Filter工作原理 MAC 地址过滤的工作原理是根据设备…...

Flink 本地 idea 调试开启 WebUI

Flink 本地 idea 调试开启 WebUI Maven 引用相关的包配置端口使用本地带UI环境启动 // maven 导入<!-- flink运行时的webUI --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-runtime-web</artifactId><version…...

如何识别IP地址是独享的还是共享的

在网络环境中&#xff0c;IP地址的分配和使用方式直接影响到用户的在线隐私和访问安全。选择独享IP还是共享IP取决于用户的具体需求&#xff0c;理解这两种IP地址的差异及其特点至关重要。本文将探讨如何区分独享IP和共享IP&#xff0c;以及各自的优缺点。 1. 什么是独享IP与共…...

X-Spreadsheet使用教程:打造你的Web端电子表格应用

在Web开发中&#xff0c;经常需要处理数据表格的展示与编辑&#xff0c;而X-Spreadsheet作为一款轻量级、功能强大的JavaScript电子表格库&#xff0c;为开发者提供了一个便捷的解决方案。本文将详细介绍如何使用X-Spreadsheet在Web项目中创建和配置电子表格&#xff0c;让你的…...

订餐点餐|订餐系统基于java的订餐点餐系统小程序设计与实现(源码+数据库+文档)

订餐点餐系统小程序 目录 基于java的订餐点餐系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布…...

Tkinter制作登录界面以及登陆后页面切换(一)

Tkinter制作登录界面以及登陆后页面切换&#xff08;一&#xff09; 前言序言1. 由来2. 思路3. 项目结构描述4. 项目实战1. 登录界面实现&#xff08;代码&#xff09;2. 首页界面实现&#xff08;代码&#xff09;3. 打包build.py&#xff08;与main.py同级目录&#xff09;4.…...

Colorful/七彩虹将星X17 AT 23 英特尔13代处理器 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能&#xff0c;自动重建COLORFUL RECOVERY功能&#xff0c;恢复到新机开箱状态。 【格式】&#xff1a;iso 【系统类型】&#xff1a;Windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 注意&#xff1a;安装系统会…...

《Ubuntu20.04环境下的ROS进阶学习8》

一、中断和定时器中断 在ROS中我们经常会遇到要使用中断函数的情况&#xff0c;中断函数的触发方式有很多种&#xff0c;比如检测到某个引脚的电平变化&#xff0c;或某个数据达到了一定的范围&#xff0c;但最实用的中断触发方式还是定时器中断。 二、编写ROS的中断代码 ros中…...

ubuntu24.04 怎么调整swap分区的大小,调整为16G

在Ubuntu中&#xff0c;swap分区的大小通常建议为物理内存的1到2倍&#xff0c;具体取决于你的使用需求和系统内存。例如&#xff0c;如果你有8GB内存&#xff0c;swap可以设置为8GB到16GB。swap的主要作用是当物理内存不足时&#xff0c;提供额外的虚拟内存&#xff0c;帮助防…...

【论文阅读】视觉里程计攻击

Adversary is on the Road: Attacks on Visual SLAM using Unnoticeable Adversarial Patch 一、视觉SLAM的不安全因素 根据论文的分析&#xff0c;视觉SLAM由于完全依赖于特征&#xff0c;缺少验证机制导致算法不安全。前端在受到干扰的情况下&#xff0c;会导致误匹配增加&…...

解决 Git LFS 切换分支失败问题

场景描述 在本地已有分支 A 的情况下&#xff0c;目前工作在分支 B。当尝试从 B 分支切回 A 分支时&#xff0c;由于 A 分支存在 LFS 上传的大文件&#xff0c;导致切换失败。这个问题通常是因为某些 LFS 文件在服务器上不存在或没有权限访问。 报错日志 切换分支时遇到的错…...

BaoStock 的安装

安装 pip3 install baostock使用这个库登录免费帐户时有时候会出现登录失败的问题 import baostock as bs # 登录系统 lg bs.login() # 登出系统 bs.logout()login failed! logout failed!可能是由于高版本的python需要验证ssl&#xff0c;本地将其设置为可信服务器地址可以…...

聚势启新 智向未来 | 重庆华阳通用科技有限公司揭牌成立

助推两江新区汽车产业高质量发展 (以下文字内容转载自两江新区网&#xff09; 9月26日&#xff0c;重庆华阳通用科技有限公司&#xff08;华阳通用重庆子公司&#xff09;在两江新区揭牌成立&#xff0c;将致力于智能座舱、智能驾驶两大领域&#xff0c;不断加大技术研发投入…...

【数据结构与算法】Z算法(扩展KMP)(C++和Python写法)

Z算法&#xff08;扩展KMP&#xff09; 文章目录 Z算法&#xff08;扩展KMP&#xff09;朴素求法线性求法力扣类型题变种题&#xff1a;[3303. 第一个几乎相等子字符串的下标](https://leetcode.cn/problems/find-the-occurrence-of-first-almost-equal-substring/) 所谓Z算法&…...

免费语音转文字软件全览:开启高效记录新时代

在当今快节奏的信息时代&#xff0c;高效地处理和记录信息变得至关重要。语音转文字技术的出现&#xff0c;为我们带来了极大的便利&#xff0c;今天&#xff0c;就让我们一同探讨这些语音转文字免费的软件的使用方法。 1.365在线转文字 链接直达&#xff1a;https://www.pdf…...

PHP“===”的意义

在PHP中&#xff0c; 运算符被称为“恒等比较运算符”&#xff08;Identical Comparison Operator&#xff09;&#xff0c;它用于比较两个变量的值和类型是否完全相同。这个运算符与双等号 &#xff08;等值比较运算符&#xff09;不同&#xff0c;后者在比较时会对两边的值进…...

Tomcat架构解析

Tomcat: 是基于JAVA语言的轻量级应用服务器&#xff0c;是一款完全开源免费的Servlet服务器实现。 1. 总体设计 socket: 其实就是操作系统提供给程序员操作“网络协议栈”的接口&#xff0c;你能通过socket的接口&#xff0c;来控制协议&#xff0c;实现网络通信&#xff0c;达…...

长沙公司核名网站/淘宝网店代运营正规公司

IO多路复用socket在客户端与服务端建立连接后,之后的请求都需要等待原生的socket服务端只能在同一时刻处理一个请求IO多路复用:可以监听多个文件描述符(socket对象),一旦文件描述符的状态出现变化,就会感知到一旦有人给服务器发送请求,服务端的socket就会发生变化或服务端通过S…...

重庆博达建设集团股份有限公司网站/磁力棒

cmd中输入 netstat -ano 回车.可以查看本机开放的全部端口. 协议&#xff1a;分为TCP和UDP本地地址&#xff08;Local Address&#xff09;&#xff1a;代表本机IP地址和打开的端口号外部地址&#xff08;Foreign Address&#xff09;&#xff1a;远程计算机IP地址和端口号状态…...

上海网站定制团队/免费发布广告信息网

《上古卷轴5》无心整合包10.0&#xff0c;10月31日更新&#xff0c;很多小伙伴不清楚安装步骤及注意事项&#xff0c;今天小编带来“夜猫无心”分享的《上古卷轴5》无心整合10.0及使用方法&#xff0c;希望对大家有帮助&#xff0c;一起来看吧。整合包下载百度网盘&#xff1a;…...

舟山市普陀区建设局网站/电脑版百度网盘

有一位美丽的公主&#xff0c;被关押在一个城堡中最高的塔上&#xff0c;一条凶恶的巨龙看守着她&#xff0c;需要有一位勇士营救她…下面是各种语言如何想办法将公主从巨龙手中营救出来的。Java – 赶到那里&#xff0c;找到巨龙&#xff0c;开发出一套由多个功能层组成的恶龙…...

做网站和游戏是如何赚钱/百度排名服务

实现了一个简单的char二维数组函数&#xff0c;传入二维数组&#xff0c;打印二维数组的内容。 #include <cstdio>#define VEINKAPI __callback #define IN typedef int YNHANDLE;VEINKAPI void PrepareList(IN int fingercount, IN char **fingerlist, IN char** nameli…...

帝国cms做门户网站/百度电脑端网页版入口

在CMakeLisits.txt里面指定编译的ARM 代码目录和DSP上代码的目录和DSP的目录&#xff0c;以及IDL文件的目录&#xff08;制定会放到DSP上执行的函数名字&#xff09; #ifndef EXAMPLE_INTERFACE_IDL #define EXAMPLE_INTERFACE_IDL #include "AEEStdDef.idl" in…...