Codeforces Round #724 (Div. 2)1536E - Omkar and Forest(思维,结论)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #724 (Div. 2)1536E - Omkar and Forest(思维,结论)相关的知识,希望对你有一定的参考价值。
考虑选出某个 # \\# #的子集使得他们都是数字 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 mx−mi>2,无论取什么数无法满足权值差不超过 1 1 1
当 m x − m i = = 2 mx-mi==2 mx−mi==2,显然权值只能取 m i + 1 mi+1 mi+1
当 m x − m i = = 1 mx-mi==1 mx−mi==1,显然权值只能取 m x mx mx
当 m x − m i = = 0 mx-mi==0 mx−mi==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)