D. Triangle Coloring

https://codeforces.com/contest/1795/problem/D

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=3e5+10,mod=998244353;
int n;
ll qmi(ll a,ll k){
	ll res=1;
	while(k){
		if(k&1) res=res*a%mod;
		k>>=1;
		a=a*a%mod;
	}
	return res;
}
bool fact(int a,int b,int c){
	return a==b&&a<c&&b<c;
}
int main(){
		ll res=1;
		cin>>n;
		ll k=1;
		for(int i=1;i<=n;i+=3){
			int x,y,z;
			cin>>x>>y>>z;
			if(x==y&&x==z) k=k*3%mod;
			else if(fact(x,y,z)||fact(x,z,y)||fact(y,z,x)) k=k*2%mod;
		}
		for(int i=n/3,j=1;i>n/6;i--,j++){
			res=res*i%mod;
			res=res*qmi(j,mod-2)%mod;
		}
		res=res*k%mod;
		cout<<res<<endl;
}
/*
就是每三个点一组,给所有数字染色,颜色只有红蓝,且一半染红一半染蓝
要想要使得结果最大
每个三原组有两种染法,红蓝蓝或者蓝红红
我们一共n/3个组,根据对称可得,n/6个得染红蓝蓝
另外有些特殊情况
例如当三个边权都一样时,就有三种情况
当两个边权一样且都是小边权时有两种情况 
*/

 

posted @   突破铁皮  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示