首页 > 其他分享 > Codeforces Round #801 (Div. 2) C(规律证明)

Codeforces Round #801 (Div. 2) C(规律证明)

时间:2022-10-06 14:55:10浏览次数:80  
标签:mn Codeforces mx Round 801 Div

Codeforces Round #801 (Div. 2) C(规律证明)

题目链接:

传送门QAQ

题意:

给定一个\(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\),有

\[mn[i][j] \leqslant sum \leqslant mx[i][j] \]

证明:首先\((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;
}

标签:mn,Codeforces,mx,Round,801,Div
From: https://www.cnblogs.com/zwh-zzz/p/16757613.html

相关文章

  • 【CF1580F】Problems for Codeforces
    【CF1580F】ProblemsforCodeforcesDescription给出\(n,m\)求满足条件的序列\(a\)个数:\(a_i+a_{i+1}<m,a_1+a_n<m\)模\(998244353\)Input一行两个数\(n,m\)Output......
  • Codeforces Round #824 (Div. 2)(持续更新)
    Preface现在先把之前打掉的题目先写了,不然时间一长又忘记了这场不知道为什么打的极其抽象,A都能写WA而且C一个细节写挂调了好久,最后30min才做出D,罚时起飞连着两场掉分了,......
  • Educational Codeforces Round 32 G Xor tree Boruvka算法
    求一个n个点的完全图每条边的权值为两点之间的异或值求最小生成树。在完全图上做最小生成树一般都是Boruvka算法即每次每个点都找一个离自己最近的点合并这样最多合并lo......
  • Codeforces Beta Round #87 (Div. 1 Only) A. Party(树的深度+dfs)
    https://codeforces.com/contest/115/problem/A题目大意:给定n个节点,每个节点都有一个不同于自己的数值,表示自己的老板,-1表示自己就是老板。现在玩游戏需要组队,一组队......
  • Codeforces Round #824 (Div. 2) C - Phase Shift
    (有点难以描述的)题意:给出一串字母,为每一个字母找一个映射,要求:1)所有的映射连起来形成一个且只有一个环;2)这个环内包含26个字母;3)映射后形成的新字符串字典序最小。解:随便找两......
  • Codeforces Round #321 (Div. 2) C. Kefa and Park(树+dfs)
    https://codeforces.com/contest/580/problem/C题目大意:给定一棵树,这棵树总共有n个节点,自己家住在节点1(根节点);每个节点都有一个标记a[i],标记为1就是这个地方有猫,0就表......
  • Codeforces 1660 D
    我是蒟蒻!我是蒟蒻!我是蒟蒻!重要的事情说三遍!传送门传送门点这儿!$\color{white}{哈哈哈!你被骗了!}$$\color{white}{真传送门在上面的感叹号!}$思路嗯?一片空白?最......
  • Codeforces Round #804 (Div. 2) C(组合 + mex)
    CodeforcesRound#804(Div.2)C(组合+mex)本萌新的第一篇题解qwq题目链接:传送门QAQ题意:给定一个\(\left[0,n-1\right]\)的排列,问有多少个排列,所有的子区间的......
  • Codeforces Round #824 (Div. 2)
    题目链接A~D懒得写。不是因为题不好,其实我觉得做起来非常舒适。但就是懒得写了(E-HousePlanning\(d_1,d_2\)全打乱感觉很难。先看看不打乱怎么做。对于每个\(i......
  • Codeforces Round #774 (Div. 2) - E. Power Board
    枚举+数论Problem-E-Codeforces题意有一个\(n*m\;(1<=n,m<=10^6)\)的矩阵,第i行第j列是\(i^j\),求这个矩阵中的\(n*m\)的数中有多少种不同的数思路......