7pts 心态炸了,不是学oi的料,大佬们求调
查看原帖
7pts 心态炸了,不是学oi的料,大佬们求调
524801
不食嗟来之食楼主2022/11/30 16:08
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
using namespace std;
typedef long long ll;
const int N=1e3+5,inf=1e9+5;
const long long mod=998244353;
int n,id,T,m,c,f;
ll C,F;
int a[N][N];
vector<int> heng[N],shu[N];
void solve() {
	F=0,C=0;
//	scanf("%d%d%d%d",&n,&m,&c,&f);
	memset(a,0,sizeof(a));
	cin>>n>>m>>c>>f;getchar();
    for(int i=1;i<=n;++i)
    {
       for(int j=1;j<=m;++j)
           	a[i][j]=getchar();
       	if(!T||i!=n)getchar();
    }
//	for(int i=1; i<=n; i++)scanf(" %s",a[i]+1);
	for(int i=1; i<=m; i++) shu[i].clear();
	for(int i=1; i<=n; i++) heng[i].clear();
	for(int i=1;i<=100;i++) shu[i].clear(),heng[i].clear(); 
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			if(a[i][j]=='1')
				heng[i].push_back(j),shu[j].push_back(i-1);
		}
	}
	for(int i=1; i<=n; i++) heng[i].push_back(m+1);
	for(int j=1; j<=m; j++) shu[j].push_back(n),shu[j].push_back(n+1);
	for(int i=1; i<=m; i++) {
		int fir=1;
		while(1) {
			int las=lower_bound(shu[i].begin(),shu[i].end(),fir)-shu[i].begin();
			las=shu[i][las];
			if(a[las][i]=='1') {
				fir=las+1;
				while(a[fir][i]=='1') fir++;
				continue;
			}
			if(las>n) break;
			long long LC,FC;
			for(int x_1=fir; x_1<=las; x_1++) {
				LC=0,FC=0;
				int c1=upper_bound(heng[x_1].begin(),heng[x_1].end(),i)-heng[x_1].begin();
				c1=heng[x_1][c1];
				for(int x_2=x_1+2; x_2<=las; x_2++) {
					int c2=upper_bound(heng[x_2].begin(),heng[x_2].end(),i)-heng[x_2].begin();
					c2=heng[x_2][c2];
					LC=(LC+(c1-i-1)*(c2-i-1)%mod)%mod;
					C=(C+LC)%mod;
					int z=lower_bound(shu[i].begin(),shu[i].end(),x_2)-shu[i].begin();
					z=shu[i][z];
					FC=(FC+(z-x_2)*LC%mod)%mod;
					F=(F+FC)%mod;
					FC=0;
					LC=0;
					C%=mod,F%=mod;
				}
				C=(C+LC)%mod;
				F=(F+FC)%mod;
			}
			if(las>=n) break;
			fir=las+1;
			while(a[fir][i]=='1') fir++;
		}
	}
	printf("%lld %lld\n",C*c%mod,F*f%mod);
	return ;
}
int main() {
//	freopen("plant.in","r",stdin);
//	freopen("plant.out","w",stdout);
//	scanf("%d%d",&T,&id);
	cin>>T>>id; 
	while(T--) {
		solve();
	}
	return 0;
}
2022/11/30 16:08
加载中...