为什么官方数据和民间数据差距这么大
查看原帖
为什么官方数据和民间数据差距这么大
417018
dark_moon楼主2022/12/6 14:33

从民间AC到官方稀烂,这中间到底经历了什么

提交记录

源代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e3 + 5, MOD = 998244353;
int t, n, m, C, F, c, sf, a[N][N], f[N][N], id, now, sum, l[N][N];
char s[N];
signed main(){
	scanf("%lld%lld", &t, &id);
	while(t --){
		c = 0, sf = 0, sum = 0;
		scanf("%lld%lld%lld%lld", &n, &m, &C, &F);
		memset(f, 0, sizeof(f));
		memset(a, 0, sizeof(a));
		for(int i = 1; i <= n; i ++){
			scanf("%s", s + 1);
			for(int j = 1; j <= m; j ++)
			a[i][j] = s[j] - '0';
		}
		for(int i = 1; i <= n; i ++){
			for(int j = m; j >= 1; j --)
			if(a[i][j] == 0)
			f[i][j] = f[i][j + 1] + 1;
			else
			f[i][j] = 0;
		}
		for(int j = 1; j <= m; j ++){
			for(int i = n; i >= 1; i --)
			if(a[i][j] == 0)
			l[i][j] = l[i + 1][j] + 1;
			else
			l[i][j] = 0;
		}
		for(int j = 1; j <= m; j ++){
			sum = 0;
			for(int i = 1; i <= n; i ++){
				if(a[i][j] == 1){
					sum = 0;
					continue;
				}
				now = sum - (max(0ll, f[i - 1][j] - 1));
				c = (c + (now * (f[i][j] - 1)) % MOD) % MOD;
				sf = (sf + (now * (f[i][j] - 1) * (l[i][j] - 1)) % MOD) % MOD;
				sum += f[i][j] - 1;
//				printf("***%lld %lld %lld %lld %lld\n", i, j, f[i][j] - 1, sum, now);
			}
		}
		printf("%lld %lld\n", (c * C) % MOD, (sf * F) % MOD);
	}
	return 0;
}
2022/12/6 14:33
加载中...