D. Triangle Coloring
2024-10-21 10:06:51
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个得染红蓝蓝
另外有些特殊情况
例如当三个边权都一样时,就有三种情况
当两个边权一样且都是小边权时有两种情况
*/
最新文章
- mysql 使用函数
- node与mongodb的使用
- jQuery学习笔记 - 基础知识扫盲入门篇
- java.util.ConcurrentModificationException
- Win10系统下编译GDAL1.9.2版本
- 关于Android 构建
- linux bin文件制作
- c#问答篇:对象与引用变量-----初学者的困惑
- LAMP的安装
- top 查看资源使用
- 为jEasyUi的日期控件添加一个“清空”按钮----通过修改1.4的easyui.min.js
- Codeforces Round #460 D. Karen and Cards
- balancer.go
- Object的所有方法
- 【转载】BlockingQueue
- JavaScript BOM和DOM
- 控件_AnalogClock
- Android性能优化-减小图片下载大小
- [Artoolkit] ARSimpleNativeCarsProj for Multi Markers Tracking
- 副本集mongodb 无缘无故 cpu异常