提出 #57128525
ソースコード 拡げる
#include<bits/stdc++.h>
#ifdef xay5421
#define D(...) fprintf(stderr,__VA_ARGS__)
#define DD(...) D(#__VA_ARGS__ "="),debug_helper::debug(__VA_ARGS__),D("\n")
#include"/home/xay5421/debug.hpp"
#else
#define D(...) ((void)0)
#define DD(...) ((void)0)
#endif
#define pb push_back
#define eb emplace_back
#define SZ(x) ((int)(x).size())
#define each(x,v) for(auto&x:v)
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
template<class T>void rd(T&x){int f=0,c;while(!isdigit(c=getchar()))f^=!(c^45);x=(c&15);while(isdigit(c=getchar()))x=x*10+(c&15);if(f)x=-x;}
template<class T>void pt(T x,int c=-1){if(x<0)putchar('-'),x=-x;if(x>9)pt(x/10);putchar(x%10+48);if(c!=-1)putchar(c);}
using namespace std;
using LL=long long;
using ULL=unsigned long long;
const int P=998244353;
int ad(int k1,int k2){return k1+k2>=P?k1+k2-P:k1+k2;}
int su(int k1,int k2){return k1-k2<0?k1-k2+P:k1-k2;}
int mu(int k1,int k2){return 1ULL*k1*k2%P;}
void uad(int&k1,int k2){(k1+=k2)>=P&&(k1-=P);}
void usu(int&k1,int k2){(k1-=k2)<0&&(k1+=P);}
template<class... T>int ad(int k1,T... k2){return ad(k1,ad(k2...));}
template<class... T>int su(int k1,T... k2){return su(k1,ad(k2...));}
template<class... T>int mu(int k1,T... k2){return mu(k1,mu(k2...));}
template<class... T>void uad(int&k1,T... k2){return uad(k1,ad(k2...));}
template<class... T>void usu(int&k1,T... k2){return usu(k1,ad(k2...));}
int po(int k1,int k2){
int k3=1;
for(;k2;k2>>=1,k1=mu(k1,k1))if(k2&1)k3=mu(k3,k1);
return k3;
}
const int N=505;
int n,m;
int L[N][N],C[N][N];
int dp[N][N];
bool check(int x,int l,int r){ // can x be max l,r ?
return L[x][r]<l;
}
int solve(int l,int r){
if(l>r){
return 1;
}
int&ret=dp[l][r];
if(ret!=-1)return ret;
ret=0;
rep(x,l,r){
if(check(x,l,r)){
uad(ret,mu(solve(l,x-1),solve(x+1,r),C[r-l][r-x]));
}
}
//DD(l,r,ret);
return ret;
}
int main(){
rep(i,0,N-1){
C[i][0]=1;
rep(j,1,i)C[i][j]=ad(C[i-1][j-1],C[i-1][j]);
}
memset(dp,-1,sizeof(dp));
rd(n),rd(m);
rep(i,1,m){
int l,r,x;
rd(l),rd(r),rd(x);
assert(l<=x&&x<=r);
L[x][r]=max(L[x][r],l);
}
rep(x,1,n){
rep(i,1,n){
L[x][i]=max(L[x][i],L[x][i-1]);
}
}
printf("%d\n",solve(1,n));
return 0;
}
提出情報
提出日時 |
|
問題 |
C - Not Argmax |
ユーザ |
xay5421 |
言語 |
C++ 20 (gcc 12.2) |
得点 |
600 |
コード長 |
2281 Byte |
結果 |
AC |
実行時間 |
84 ms |
メモリ |
6840 KiB |
ジャッジ結果
セット名 |
Sample |
All |
得点 / 配点 |
0 / 0 |
600 / 600 |
結果 |
|
|
セット名 |
テストケース |
Sample |
00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt |
All |
00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt |
ケース名 |
結果 |
実行時間 |
メモリ |
00-sample-001.txt |
AC |
2 ms |
5616 KiB |
00-sample-002.txt |
AC |
2 ms |
5632 KiB |
00-sample-003.txt |
AC |
2 ms |
5640 KiB |
00-sample-004.txt |
AC |
2 ms |
5640 KiB |
01-001.txt |
AC |
2 ms |
5736 KiB |
01-002.txt |
AC |
2 ms |
5588 KiB |
01-003.txt |
AC |
39 ms |
6604 KiB |
01-004.txt |
AC |
6 ms |
6132 KiB |
01-005.txt |
AC |
2 ms |
5700 KiB |
01-006.txt |
AC |
58 ms |
6608 KiB |
01-007.txt |
AC |
5 ms |
6100 KiB |
01-008.txt |
AC |
84 ms |
6840 KiB |
01-009.txt |
AC |
83 ms |
6652 KiB |
01-010.txt |
AC |
84 ms |
6644 KiB |
01-011.txt |
AC |
84 ms |
6780 KiB |
01-012.txt |
AC |
80 ms |
6780 KiB |
01-013.txt |
AC |
77 ms |
6648 KiB |
01-014.txt |
AC |
61 ms |
6720 KiB |
01-015.txt |
AC |
45 ms |
6644 KiB |
01-016.txt |
AC |
33 ms |
6708 KiB |
01-017.txt |
AC |
5 ms |
6632 KiB |
01-018.txt |
AC |
7 ms |
6596 KiB |
01-019.txt |
AC |
7 ms |
6732 KiB |
01-020.txt |
AC |
7 ms |
6724 KiB |
01-021.txt |
AC |
8 ms |
6600 KiB |
01-022.txt |
AC |
7 ms |
6604 KiB |
01-023.txt |
AC |
7 ms |
6724 KiB |
01-024.txt |
AC |
7 ms |
6560 KiB |
01-025.txt |
AC |
7 ms |
6596 KiB |
01-026.txt |
AC |
7 ms |
6620 KiB |
01-027.txt |
AC |
11 ms |
6736 KiB |