Submission #25003186
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define fill0(a) memset(a,0,sizeof(a))
#define fill1(a) memset(a,-1,sizeof(a))
#define fillbig(a) memset(a,63,sizeof(a))
#define pb push_back
#define ppb pop_back
#define mp make_pair
#define eprintf(...) fprintf(stderr,__VA_ARGS__)
template<typename T1,typename T2> void chkmin(T1 &x,T2 y){if(x>y) x=y;}
template<typename T1,typename T2> void chkmax(T1 &x,T2 y){if(x<y) x=y;}
typedef pair<int,int> pii;
typedef long long ll;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef long double ld;
namespace fastio{
#define FILE_SIZE 1<<23
char rbuf[FILE_SIZE],*p1=rbuf,*p2=rbuf,wbuf[FILE_SIZE],*p3=wbuf;
inline char getc(){return p1==p2&&(p2=(p1=rbuf)+fread(rbuf,1,FILE_SIZE,stdin),p1==p2)?-1:*p1++;}
inline void putc(char x){(*p3++=x);}
template<typename T> void read(T &x){
x=0;char c=getchar();T neg=0;
while(!isdigit(c)) neg|=!(c^'-'),c=getchar();
while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(neg) x=(~x)+1;
}
template<typename T> void recursive_print(T x){return (!x)?void():(recursive_print(x/10),putc(x%10^48),void());}
template<typename T> void print(T x){(!x)&&(putc('0'),0);(x<0)&&(putc('-'),x=~x+1);recursive_print(x);}
template<typename T> void print(T x,char c){(!x)&&(putc('0'),0);(x<0)&&(putc('-'),x=~x+1);recursive_print(x);putc(c);}
void print_final(){fwrite(wbuf,1,p3-wbuf,stdout);}
}
const int MAXN=600;
const int MOD=1e9+7;
int n,a[MAXN+5],vis[MAXN+5],id[MAXN+5],m=0,is[MAXN+5];
int dp[MAXN+5][MAXN+5][MAXN+5];
void add(int &x,int v){((x+=v)>=MOD)&&(x-=MOD);}
int main(){
scanf("%d",&n);
for(int i=1;i<=n<<1;i++) scanf("%d",&a[i]);
for(int i=1;i<=n<<1;i+=2) if(~a[i]&&~a[i+1]) vis[a[i]]=vis[a[i+1]]=1;
for(int i=1;i<=n<<1;i++) if(!vis[i]) id[i]=++m;
for(int i=1;i<=n<<1;i+=2){
if(~a[i]&&!~a[i+1]) is[id[a[i]]]=1;
if(!~a[i]&&~a[i+1]) is[id[a[i+1]]]=1;
} dp[m+1][0][0]=1;
// for(int i=1;i<=m;i++) printf("%d\n",is[i]);
for(int i=m;i;i--) for(int j=0;j<=m-i;j++) for(int k=0;k+j<=m-i;k++){
if(is[i]){
add(dp[i][j][k+1],dp[i+1][j][k]);
if(j) add(dp[i][j-1][k],dp[i+1][j][k]);
} else {
add(dp[i][j+1][k],dp[i+1][j][k]);
if(k) add(dp[i][j][k-1],1ll*dp[i+1][j][k]*k%MOD);
if(j) add(dp[i][j-1][k],dp[i+1][j][k]);
} //printf("%d %d %d %d\n",i,j,k,dp[i][j][k]);
} int res=dp[1][0][0];
int cc=0;for(int i=1;i<=(n<<1);i+=2) cc+=((!~a[i])&&(!~a[i+1]));
for(int i=1;i<=cc;i++) res=1ll*res*i%MOD;
printf("%d\n",res);
return 0;
}
/*
6
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
*/
Submission Info
| Submission Time |
|
| Task |
F - Permutation and Minimum |
| User |
tzc_wk |
| Language |
C++ (GCC 9.2.1) |
| Score |
1600 |
| Code Size |
2603 Byte |
| Status |
AC |
| Exec Time |
448 ms |
| Memory |
432180 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:41:7: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
41 | scanf("%d",&n);
| ~~~~~^~~~~~~~~
./Main.cpp:42:32: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
42 | for(int i=1;i<=n<<1;i++) scanf("%d",&a[i]);
| ~~~~~^~~~~~~~~~~~
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
1600 / 1600 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample1.txt, sample2.txt, sample3.txt, sample4.txt |
| All |
sample1.txt, sample2.txt, sample3.txt, sample4.txt, 1.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 2.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 3.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, sample1.txt, sample2.txt, sample3.txt, sample4.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 1.txt |
AC |
8 ms |
4236 KiB |
| 10.txt |
AC |
433 ms |
426164 KiB |
| 11.txt |
AC |
439 ms |
431864 KiB |
| 12.txt |
AC |
442 ms |
429268 KiB |
| 13.txt |
AC |
448 ms |
432092 KiB |
| 14.txt |
AC |
9 ms |
9080 KiB |
| 15.txt |
AC |
251 ms |
255836 KiB |
| 16.txt |
AC |
365 ms |
361044 KiB |
| 17.txt |
AC |
409 ms |
403940 KiB |
| 18.txt |
AC |
448 ms |
432120 KiB |
| 19.txt |
AC |
372 ms |
376652 KiB |
| 2.txt |
AC |
440 ms |
426560 KiB |
| 20.txt |
AC |
434 ms |
426072 KiB |
| 21.txt |
AC |
435 ms |
429092 KiB |
| 22.txt |
AC |
438 ms |
426232 KiB |
| 23.txt |
AC |
442 ms |
432180 KiB |
| 24.txt |
AC |
2 ms |
3728 KiB |
| 25.txt |
AC |
430 ms |
431636 KiB |
| 3.txt |
AC |
447 ms |
432092 KiB |
| 4.txt |
AC |
8 ms |
6824 KiB |
| 5.txt |
AC |
243 ms |
242680 KiB |
| 6.txt |
AC |
419 ms |
409544 KiB |
| 7.txt |
AC |
433 ms |
423632 KiB |
| 8.txt |
AC |
446 ms |
432052 KiB |
| 9.txt |
AC |
372 ms |
376472 KiB |
| sample1.txt |
AC |
2 ms |
3776 KiB |
| sample2.txt |
AC |
2 ms |
3704 KiB |
| sample3.txt |
AC |
2 ms |
4140 KiB |
| sample4.txt |
AC |
5 ms |
5796 KiB |