Codeforces Round #724 (Div. 2)1536E - Omkar and Forest(思维,结论)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #724 (Div. 2)1536E - Omkar and Forest(思维,结论)相关的知识,希望对你有一定的参考价值。

LINK

考虑选出某个 # \\# #的子集使得他们都是数字 0 0 0,其余则不是.

那么把 0 0 0作为起点做一次多源 b f s bfs bfs,令每个点的数字为最短路,这一定是一种可行的构造

因为每个位置都有前驱,这个前驱比自己恰好小 1 1 1

而且这个方案是唯一的。

令格子 x x x周围的点权最大值为 m x mx mx,最小值为 m i mi mi

m x − m i > 2 mx-mi>2 mxmi>2,无论取什么数无法满足权值差不超过 1 1 1

m x − m i = = 2 mx-mi==2 mxmi==2,显然权值只能取 m i + 1 mi+1 mi+1

m x − m i = = 1 mx-mi==1 mxmi==1,显然权值只能取 m x mx mx

m x − m i = = 0 mx-mi==0 mxmi==0时,显然权值只能取 m x + 1 mx+1 mx+1

综上所诉,方案是固定的.

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2009;
const int mod = 1e9+7;
int n,m;
char a[maxn][maxn];
int main()
{
	int t; cin >> t;
	while( t-- )
	{
		cin >> n >> m; getchar();
		int ans = 1, flag = 0;
		for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			scanf("%c",&a[i][j] );
			if( a[i][j]=='#' )	ans = 1ll*ans*2%mod;
			else	flag = 1;
			if( j==m )	getchar();
		}
		ans = ( ans-(!flag)+mod )%mod;
		cout << ans << endl;		
	}
}

以上是关于Codeforces Round #724 (Div. 2)1536E - Omkar and Forest(思维,结论)的主要内容,如果未能解决你的问题,请参考以下文章

E. Omkar and Forest——Codeforces Round #724 (Div. 2)

E. Omkar and Forest——Codeforces Round #724 (Div. 2)

F. Omkar and Akmar游戏,组合,逆元—— Codeforces Round #724 (Div. 2)

Codeforces Round #724 (Div. 2)(CD)

Codeforces Round #724 div.2 A-F题解

Codeforces Round #724 div.2 A-F题解