题解
2023-08-26 10:31:30
发布于:广东
4阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define debug(x) cout << #x << " = " << x << endl
#define file(FILENAME) freopen(FILENAME".in", "r", stdin), freopen(FILENAME".out", "w", stdout)
#define LINE() cout << "LINE = " << __LINE__ << endl
#define LL long long
#define ull unsigned long long
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define fst first
#define scd second
#define inv(x) qpow((x),mod - 2)
#define lowbit(x) ((x) & (-(x)))
#define abs(x) ((x) < 0 ? (-(x)) : (x))
#define randint(l, r) (rand() % ((r) - (l) + 1) + (l))
#define vec vector
const int MAXN = 6010;
const int INF = 2e9;
const double PI = acos(-1);
const double eps = 1e-6;
const int mod = 1e9 + 7;
int n, m;
int dp[2][MAXN][2];
int now, pre = 1;
pii s[MAXN];
template<typename T> inline bool read(T &a) {
a = 0; char c = getchar(); int f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') {a = a * 10 + (c ^ 48); c = getchar();}
a *= f;
return 1;
}
template<typename A, typename ...B>
inline bool read(A &x, B &...y) {return read(x) && read(y...);}
signed main () {
read(n);
for(int i = 1; i <= n; ++i) read(s[i].fst), s[i].scd = 0;
for(int i = 1; i <= n; ++i) read(s[i + n].fst), s[i + n].scd = 1;
sort(s + 1, s + n * 2 + 1);
dp[now][0][1] = 1;
for(int i = 1; i <= n * 2; ++i) {
swap(now, pre);
memset(dp[now], 0, sizeof dp[now]);
if(!s[i].scd) {
for(int j = 0; j <= n; ++j) {
if(j) (dp[now][j][0] += dp[pre][j - 1][0]) %= mod;
if(j) (dp[now][j][1] += dp[pre][j - 1][1]) %= mod;
(dp[now][j][0] += dp[pre][j][0] + dp[pre][j][1]) %= mod;
}
} else {
for(int j = 0; j <= n; ++j) {
(dp[now][j][1] += dp[pre][j][1]) %= mod;
(dp[now][j][1] += dp[pre][j + 1][1] * (j + 1) % mod) %= mod;
(dp[now][j][0] += dp[pre][j + 1][0] * (j + 1) % mod) %= mod;
}
}
}
cout<<((dp[now][0][0] + dp[now][0][1]) % mod + mod) % mod;
return 0;
}
又是击败两位大佬的一天(欸,怎么感觉背后凉凉的)
这里空空如也
有帮助,赞一个