用户工具

站点工具


2020-2021:teams:wangzai_milk:hdu6578

HDU6578

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define Mod 998244353
#define LL long long
using namespace std;
const int N=105;
int n,m;
LL f[2][N][N][N],res;
int read()
{
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*f;
}
struct Node{int l,r,x;}c[105];
bool cmp(Node o1,Node o2){return o1.r<o2.r;}
int main()
{
	int T=read();
	while(T--)
	{
		memset(f,0,sizeof(f));
		n=read(),m=read(),res=0;
		for(int i=1;i<=m;i++)c[i].l=read(),c[i].r=read(),c[i].x=read();
		sort(c+1,c+1+m,cmp);
		f[0][0][0][0]=1;
		int p=1,r=0;
		for(int i=0;i<=n;i++,r^=1)
		{
			for(int j=0;j<=i;j++)
			for(int k=0;k<=j;k++)
			for(int l=0;l<=k;l++)
			{
				int t=p;
				while(t<=m&&c[t].r==i)
				{
					int num=(j>=c[t].l)+(k>=c[t].l)+(l>=c[t].l)+1;
					if(num!=c[t].x)f[r][j][k][l]=0;
					t++;
				}
			}
			while(p<=m&&c[p].r<=i)p++;
			for(int j=0;j<=i;j++)
			for(int k=0;k<=j;k++)
			for(int l=0;l<=k;l++)
			{
				f[r^1][i][j][k]=(f[r^1][i][j][k]+f[r][j][k][l])%Mod;
				f[r^1][j][k][l]=(f[r^1][j][k][l]+f[r][j][k][l])%Mod;
				f[r^1][i][k][l]=(f[r^1][i][k][l]+f[r][j][k][l])%Mod;
				f[r^1][i][j][l]=(f[r^1][i][j][l]+f[r][j][k][l])%Mod;
			}
			for(int j=0;j<=i;j++)
			for(int k=0;k<=j;k++)
			for(int l=0;l<=k;l++)
			{
				if(i==n)res=(res+f[r][j][k][l])%Mod;
				f[r][j][k][l]=0;
			}
		}
		printf("%lld\n",res%Mod);
	}
	return 0;
}
2020-2021/teams/wangzai_milk/hdu6578.txt · 最后更改: 2020/05/18 18:13 由 zars19