TLE求助
查看原帖
TLE求助
1163927
F1NE楼主2024/10/30 20:38

记录

#include<bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
const ull mod=998244353;
const int maxi=1e3+9;
bitset<maxi> a[maxi];
int cntx[maxi][maxi],cnty[maxi][maxi];
int T,id,N,M,C,F;
ull ans1,ans2;
namespace T1{
	inline ull fmul(ull a,ull b){
		ull ans=0;
		for(;b;a=(a<<1)%mod,b>>=1){
			if(b&1)ans=(a+ans)%mod;
		}
		return ans;
	}
	inline void clear_(){
		for(int i=1;i<=N;i++){
			a[i]=0;
			for(int j=1;j<=M;j++){
				cntx[i][j]=cnty[i][j]=0;
			}
		}
		ans1=ans2=0;
	} 
	inline void getin(){
		cin>>N>>M>>C>>F;
		for(int i=1;i<=N;i++){
			for(int j=1;j<=M;j++){
				char t;
				t=getchar();
				for(;t=='\n';)t=getchar();
				a[i][j]=(t=='0'?0:1);
			}
		}
	}
	inline void pretreat(){
		for(int i=N;i>=1;i--){
			for(int j=M;j>=1;j--){
				if(!a[i][j]){
					cntx[i][j]=cntx[i][j+1]+1;
				 	cnty[i][j]=cnty[i+1][j]+1;
//cerr<<"cnty["<<i<<"]["<<j<<"]="<<cnty[i][j]<<'\n';
//cerr<<"cntx["<<i<<"]["<<j<<"]="<<cntx[i][j]<<'\n';
				}
			}
		}
	}
	inline void statis(){
		for(int i=1;i<=N;i++){
			for(int j=1;j<=N;j++){
				if(a[i][j]
				||cntx[i][j]<=1
				||cnty[i][j]<=2)continue;
//cerr<<"cnty["<<i<<"]["<<j<<"]="<<cnty[i][j]<<'\n';
//cerr<<"cntx["<<i<<"]["<<j<<"]="<<cntx[i][j]<<'\n';
				for(int k=i+2;k<=N;k++){
					if(a[k][j])break;
//cerr<<"cnty["<<k<<"]["<<j<<"]="<<cnty[k][j]<<'\n';
//cerr<<"cntx["<<k<<"]["<<j<<"]="<<cntx[k][j]<<'\n';
ans1=(ans1+fmul(cntx[i][j]-1,cntx[k][j]-1))%mod;
					if(cnty[k][j]>=2);
ans2=(ans2+fmul(fmul(cntx[i][j]-1,cntx[k][j]-1),cnty[k][j]-1))%mod;
				}
			}
		}
	}
	inline void output(){
		printf("%llu %llu\n",fmul(ans1,C),fmul(ans2,F));
	}
	inline void solve(){
//cerr<<"solve() started\n";
		clear_();
		getin();
		pretreat();
		statis();
		output();
	}
	inline void init(){
//cerr<<"init start\n";
		cin>>T>>id;
		for(int i=1;i<=T;i++)solve();
	}
}
int main(){
//cerr<<T1::fmul(987654321ll,123456789ll)<<'\n';
	T1::init();
	return 0;
} 
2024/10/30 20:38
加载中...