Codeforces Round #801 (Div. 2) C(规律证明)
Codeforces Round #801 (Div. 2) C(规律证明)
题目链接:
题意:
给定一个\(n * m\)的矩阵,矩阵的每个单元的值为1或-1,问从\((1,1)\)开始出发,每次只可以向下和向右走,问到终点\((n * m)\)时,是否可以总值为1。
分析:
题意很简单,本题的重点是在于,是否知道一个这样的结论:
首先定义 \(mn[i][j]\)为在\((i,j)\)处能拿到最少数量的1。
\(mx[i][j]\)为在\((i,j)\)处能拿到最多数量的1。
结论:走到\((i,j)\)处可以拿的1的数量\(sum\),有
\]
证明:首先\((1,1)\)处显然成立,假设在\((i,j)\)处同样成立,那么对于\((i+1,j)\)处,显然他是由\((i,j)\)和\((i,j-1)\)转移过来,所以无论\(a[i][j]\)是否为1,都成立,同理可以去证明,\((i,j+1)\)处和\((i+1,j+1)\)处也成立,根据归纳法,该结论对于任意\((i,j)\)都成立。
代码:
void solve(){
cin >> n >> m;
for (int i = 1;i <=n;i ++) {
for (int j = 1;j <= m;j ++) {
cin >> a[i][j];
if(a[i][j] == -1) a[i][j] = 0;
mn[i][j] = 0;
mx[i][j] = 0;
}
}
if((n + m - 1) % 2 == 1) {
cout << "NO" << endl;
return ;
}
mn[1][1] = mx[1][1] = (a[1][1] == 1);
for (int i = 1;i <= n; i++) {
for (int j = 1;j <= m;j ++) {
if(i == 1 && j == 1) continue;
if(j == 1) {
mn[i][j] = mn[i-1][j] + a[i][j];
mx[i][j] = mn[i-1][j] + a[i][j];
}
else if(i == 1) {
mn[i][j] = mn[i][j-1] + a[i][j];
mx[i][j] = mn[i][j-1] + a[i][j];
}
else {
mx[i][j] = max(mx[i-1][j] , mx[i][j-1]) + a[i][j];
mn[i][j] = min(mn[i][j-1] , mn[i-1][j]) + a[i][j];
}
}
}
int ans = (n + m - 1) / 2;
if(ans >= mn[n][m] && ans <= mx[n][m]) cout << "YES" << endl;
else cout << "NO" << endl;
}
Codeforces Round #801 (Div. 2) C(规律证明)的更多相关文章
- Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round(C,D题解)
Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round C - Zero Path 在这道题目中,不可以真正地进行寻 ...
- Codeforces Round #801 (Div. 2)
题集链接 A Subrectangle Guess 代码 #include <bits/stdc++.h> #define endl "\n" using namesp ...
- 找规律/贪心 Codeforces Round #310 (Div. 2) A. Case of the Zeros and Ones
题目传送门 /* 找规律/贪心:ans = n - 01匹配的总数,水 */ #include <cstdio> #include <iostream> #include &l ...
- 找规律 Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks
题目传送门 /* 找规律,水 */ #include <cstdio> #include <iostream> #include <algorithm> #incl ...
- 数学/找规律/暴力 Codeforces Round #306 (Div. 2) C. Divisibility by Eight
题目传送门 /* 数学/暴力:只要一个数的最后三位能被8整除,那么它就是答案:用到sprintf把数字转移成字符读入 */ #include <cstdio> #include <a ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
- Codeforces Round #114 (Div. 2)
Codeforces Round #114 (Div. 2) 代码 Codeforces Round #114 (Div. 2) C. Wizards and Trolleybuses 思路 每条车的 ...
- Codeforces Round #373 (Div. 2)A B
Codeforces Round #373 (Div. 2) A. Vitya in the Countryside 这回做的好差啊,a想不到被hack的数据,b又没有想到正确的思维 = = [题目链 ...
随机推荐
- 四位一体水溶交融,Docker一拖三Tornado6.2 + Nginx + Supervisord非阻塞负载均衡容器式部署实践
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_203 容器,又见容器.Docker容器的最主要优点就在于它们是可移植的.一套服务,其所有的依赖关系可以捆绑到一个独立于Linux内 ...
- MySQL Shell无法拉起MGR集群解决办法
MySQL Shell无法拉起MGR集群解决办法 用MySQL Shell要重新拉起一个MGR集群时,可能会提示下面的错误信息: Dba.rebootClusterFromCompleteOutage ...
- LuoguP4219 [BJOI2014]大融合(LCT)
早上考试想用\(LCT\)维护联通块\(size\),现在才发现\(LCT\)的\(size\)有虚实之分 \(Link\)与\(Acess\)中虚实变,干他丫的 \(Splay\)中只是相对关系,没 ...
- ABP vNext系列文章03---依赖注入
一.依赖注入的类型注册 ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的.因此,它的 ...
- SpringBoot整合Redis实现常用功能
SpringBoot整合Redis实现常用功能 建议大小伙们,在写业务的时候,提前画好流程图,思路会清晰很多. 文末有解决缓存穿透和击穿的通用工具类. 1 登陆功能 我想,登陆功能是每个项目必备的功能 ...
- Mybatis 插件使用及源码分析
Mybatis 插件 Mybatis插件主要是通过JDK动态代理实现的,插件可以针对接口中的方法进行代理增强,在Mybatis中比较重要的接口如下: Executor :sql执行器,包含多个实现类, ...
- Spring 04: IOC控制反转 + DI依赖注入
Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...
- Apple Music 免费试用 2 个月
下载地址:https://redeem.apple.com/am-genshin-impact-2mo-zh-cn?origin=&locale=zh-CN 使用指南 打开链接,点击" ...
- InnoDB_锁总结
1. 查询会对资源添加共享锁 加了共享锁的资源不可以被修改:但可以被查询(也是会在资源上再加共享锁) 2. 数据修改会对资源添加排他锁 加了排他锁的资源只能被持有这个排他锁的事务读取和修改,其他事务读 ...
- MariaDB数据库 主-从 部署
〇.前言 好久没碰数据库了 准备环境: centos7自带的MariaDB,没有的话下面是安装命令 yum install -y mariadb mariadb-server systemctl re ...