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
AC × 4
AC × 33
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