为什么运行时错误?
  • 板块学术版
  • 楼主DHeasy
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/6/29 20:43
  • 上次更新2025/6/30 17:41:51
查看原帖
为什么运行时错误?
528325
DHeasy楼主2025/6/29 20:43

题目:ARC197D

感觉问题出在 sort 那边。

#include<bits/stdc++.h>
#define ll long long
#define re register
#define fi first
#define se second
using namespace std;
inline ll read(){
	ll res=0ll,f=1;
	char c;
	for(;(c=getchar())<'0'||c>'9';c=='-'?f=-f:0);
	while(c>='0' && c<='9') res=(res<<1) + (res<<3) + c-'0',c=getchar();
	return res*f;
}
inline ll Max(re ll x,re ll y){return x>y?x:y;}
inline ll Min(re ll x,re ll y){return x<y?x:y;}
inline void cmax(re auto &x,re auto y){x=Max(x,y);}
inline void cmin(re auto &x,re auto y){x=Min(x,y);}
/*-----------------*/
const ll mod=998244353;
inline ll add(re ll x,re ll y){return ((x+y)%mod+mod)%mod;}
inline ll mul(re ll x,re ll y){return (x*y%mod+mod)%mod;}
inline void Add(re ll &x,re ll y){x=add(x,y);}
inline void Mul(re ll &x,re ll y){x=mul(x,y);}
const int N=410;
int T,n;ll ans;
bitset<N> a[N];
inline ll f(re int x){
	ll sum=1;
	for(re int i=1;i<=x;i++) Mul(sum,i);
	return sum;
}
inline ll solve(){
	n=read();bool F=0;
	for(re int i=1;i<=n;i++) a[i].reset();
	for(re int i=1;i<=n;i++){
		for(re int j=1;j<=n;j++){
			int x=read();
			if((i==1||j==1)&&!x) F=1;
			x?(a[i].set(j),0):0;
		}
	}
	for(re int i=1;i<=n;i++)
	for(re int j=i+1;j<=n;j++)
		if(((a[i]|a[j])==a[j]||
			(a[i]|a[j])==a[i])
			^a[i][j]) return 0;
	if(F) return 0;
	ans=1;
	sort(a+2,a+n+1,
		[n](re bitset<N> x,re bitset<N> y){
			for(re int i=1;i<=n;i++){
				if(x[i]!=y[i]) return !x[i];
			}
			return true;
		}
	);
	int x=1;
	for(re int i=3;i<=n;i++){
		if(a[i]==a[i-1]) x++;
		else Mul(ans,f(x)),x=1;
	}
	return mul(ans,f(x));
}
int main(){
	T=read();
	while(T--) printf("%lld\n",solve());
	return 0;
}
2025/6/29 20:43
加载中...