提出 #48193657


ソースコード 拡げる

#include<bits/stdc++.h>
#include<atcoder/modint>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef atcoder::modint998244353 mint;

#define rep(i,l,r) for(int i(l);i<=(r);++i)
#define per(i,r,l) for(int i(r);i>=(l);--i)
#define eb emplace_back
#define File(filename) freopen(filename ".in","r",stdin),freopen(filename ".out","w",stdout)

#ifdef EXODUS
	#define Debug(...) fprintf(stderr,__VA_ARGS__)
#else
	#define Debug(...) 0
#endif

//=========================================================================================================
// Something about IO

template<typename T>
void read(T &x){
	x=0;T flg=1;
	char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')flg=-1;ch=getchar();}
	while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	x*=flg;
}
template<typename T,typename... Args>
void read(T &x,Args &...args){read(x),read(args...);}

//=========================================================================================================
// Define the global variables here.

bool membg=0;


constexpr int N=2e3+7;

int n,m;
char s[N][N];
int yr[N],yl[N],sum[N][N],all;

bool memed=0;

//=========================================================================================================
// Code here.

void solve(){
	read(n,m);
	rep(i,1,n)scanf("%s",s[i]+1);
	rep(i,1,n)rep(j,1,m)
		if(s[i][j]=='Y')sum[i][j]++,yr[i]++,yl[j]++,all++;
	rep(i,1,n)rep(j,1,m)sum[i][j]+=sum[i][j-1];
	rep(j,1,m)rep(i,1,n)sum[i][j]+=sum[i-1][j];
	auto ask=[&](int u,int d,int l,int r){return sum[d][r]-sum[u-1][r]-sum[d][l-1]+sum[u-1][l-1];};
	if(!all||(all&1))return printf("0\n"),void();
	all>>=1;mint ans=0;
	for(int a=1,b;a<=n;a++){
		if(all%a)continue;b=all/a;
		if(b>m)continue;
		// printf("===%d %d===\n",a,b);
		basic_string<int>row{1},line{1};
		mint cR=1,cL=1;
		for(int i=1,j=1;i<=n;i=j){
			int cur=0;
			while(j<=n&&cur<2*b)cur+=yr[j],j++;
			int free=1;
			while(j<=n&&yr[j]==0)free++,j++;
			row+=j;if(j<=n)cR*=free;
		}
		for(int i=1,j=1;i<=m;i=j){
			int cur=0;
			while(j<=m&&cur<2*a)cur+=yl[j],j++;
			int free=1;
			while(j<=m&&yl[j]==0)free++,j++;
			line+=j;if(j<=m)cL*=free;
		}
		// for(auto x:row)printf("%d ",x);printf("\n");
		// for(auto x:line)printf("%d ",x);printf("\n");
		for(int i=0;i<a;i++)
			for(int j=0;j<b;j++)
				if(ask(row[i],row[i+1]-1,line[j],line[j+1]-1)!=2)
					goto there;
		ans+=cR*cL;
		there:;
	}
	printf("%d\n",ans.val());
	
	return;
}


//=========================================================================================================

int main(){
	Debug("%.3lfMB\n",fabs(&memed-&membg)/1024.0/1024.0);
	int timbg=clock();
	int T=1;
	while(T--)solve();
	int timed=clock();
	Debug("%.3lfs\n",1.0*(timed-timbg)/CLOCKS_PER_SEC);
	fflush(stdout);
	return 0;
}

提出情報

提出日時
問題 D - YY Garden
ユーザ EXODUS
言語 C++ 20 (gcc 12.2)
得点 600
コード長 2913 Byte
結果 AC
実行時間 51 ms
メモリ 23580 KiB

コンパイルエラー

Main.cpp: In function ‘void solve()’:
Main.cpp:64:17: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
   64 |                 if(all%a)continue;b=all/a;
      |                 ^~
Main.cpp:64:35: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
   64 |                 if(all%a)continue;b=all/a;
      |                                   ^
Main.cpp: In function ‘int main()’:
Main.cpp:19:28: warning: statement has no effect [-Wunused-value]
   19 |         #define Debug(...) 0
      |                            ^
Main.cpp:101:9: note: in expansion of macro ‘Debug’
  101 |         Debug("%.3lfMB\n",fabs(&memed-&membg)/1024.0/1024.0);
      |         ^~~~~
Main.cpp:19:28: warning: statement has no effect [-Wunused-value]
   19 |         #define Debug(...) 0
      |                            ^
Main.cpp:106:9: note: in expansion of macro ‘Debug’
  106 |         Debug("%.3lfs\n",1.0*(timed-timbg)/CLOCKS_PER_SEC);
      |         ^~~~~
Main.cpp:102:13: warning: unused variable ‘timbg’ [-Wunused-variable]
  102 |         int timbg=clock();
      |             ^~~~~
Main.cpp:105:13: warning: unused variable ‘timed’ [-Wunused-variable]
  105 |         int timed=clock();
      |             ^~~~~
Main.cpp: In function ‘void solve()’:
Main.cpp:55:24: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   55 |         rep(i,1,n)scanf("%s",s[i]+1);
      |                   ~~~~~^~~~~~~~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 3
AC × 62
セット名 テストケース
Sample 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt
All 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt, 01-028.txt, 01-029.txt, 01-030.txt, 01-031.txt, 01-032.txt, 01-033.txt, 01-034.txt, 01-035.txt, 01-036.txt, 01-037.txt, 01-038.txt, 01-039.txt, 01-040.txt, 01-041.txt, 01-042.txt, 01-043.txt, 01-044.txt, 01-045.txt, 01-046.txt, 01-047.txt, 01-048.txt, 01-049.txt, 01-050.txt, 01-051.txt, 01-052.txt, 01-053.txt, 01-054.txt, 01-055.txt, 01-056.txt, 01-057.txt, 01-058.txt, 01-059.txt
ケース名 結果 実行時間 メモリ
00-sample-001.txt AC 1 ms 3740 KiB
00-sample-002.txt AC 1 ms 3684 KiB
00-sample-003.txt AC 1 ms 3892 KiB
01-001.txt AC 1 ms 3752 KiB
01-002.txt AC 1 ms 3680 KiB
01-003.txt AC 1 ms 3644 KiB
01-004.txt AC 1 ms 3736 KiB
01-005.txt AC 1 ms 3688 KiB
01-006.txt AC 1 ms 3688 KiB
01-007.txt AC 1 ms 3688 KiB
01-008.txt AC 38 ms 23484 KiB
01-009.txt AC 38 ms 23484 KiB
01-010.txt AC 1 ms 3772 KiB
01-011.txt AC 39 ms 23352 KiB
01-012.txt AC 2 ms 4308 KiB
01-013.txt AC 37 ms 23380 KiB
01-014.txt AC 40 ms 23368 KiB
01-015.txt AC 41 ms 23388 KiB
01-016.txt AC 44 ms 23520 KiB
01-017.txt AC 1 ms 3892 KiB
01-018.txt AC 38 ms 23504 KiB
01-019.txt AC 2 ms 4508 KiB
01-020.txt AC 38 ms 23364 KiB
01-021.txt AC 40 ms 23504 KiB
01-022.txt AC 43 ms 23320 KiB
01-023.txt AC 48 ms 23496 KiB
01-024.txt AC 51 ms 23172 KiB
01-025.txt AC 1 ms 3740 KiB
01-026.txt AC 1 ms 3792 KiB
01-027.txt AC 38 ms 23304 KiB
01-028.txt AC 1 ms 3872 KiB
01-029.txt AC 1 ms 3836 KiB
01-030.txt AC 39 ms 23444 KiB
01-031.txt AC 1 ms 3920 KiB
01-032.txt AC 8 ms 16016 KiB
01-033.txt AC 8 ms 16028 KiB
01-034.txt AC 1 ms 4168 KiB
01-035.txt AC 2 ms 4508 KiB
01-036.txt AC 38 ms 23348 KiB
01-037.txt AC 2 ms 4368 KiB
01-038.txt AC 2 ms 4808 KiB
01-039.txt AC 38 ms 23304 KiB
01-040.txt AC 23 ms 15220 KiB
01-041.txt AC 43 ms 23580 KiB
01-042.txt AC 25 ms 19228 KiB
01-043.txt AC 42 ms 23324 KiB
01-044.txt AC 26 ms 17912 KiB
01-045.txt AC 44 ms 23368 KiB
01-046.txt AC 3 ms 5716 KiB
01-047.txt AC 39 ms 23564 KiB
01-048.txt AC 3 ms 6300 KiB
01-049.txt AC 38 ms 23492 KiB
01-050.txt AC 38 ms 23304 KiB
01-051.txt AC 38 ms 23480 KiB
01-052.txt AC 38 ms 23488 KiB
01-053.txt AC 38 ms 23480 KiB
01-054.txt AC 39 ms 23288 KiB
01-055.txt AC 38 ms 23480 KiB
01-056.txt AC 38 ms 23376 KiB
01-057.txt AC 38 ms 23296 KiB
01-058.txt AC 38 ms 23496 KiB
01-059.txt AC 38 ms 23256 KiB