哪个大佬能救救小白,50分就是过不了

P5684 [CSP-J2019 江西] 非回文串

```C++ #include <bits/stdc++.h> #define ll long long #define ull unsigned long long #define lll __int128 #define pb emplace_back #define INF_INT 2e9 #define INF_LLONG 1e18 #define INF_INT_MEMSET_SMALL 0x3f3f3f3f #define INF_INT_MEMSET_BIG 0x7f7f7f7f using namespace std; const ll Mod = 1e9 + 7; const ll N = 2005; ll n; ll total; char s[N]; ll A[N][N], C[N][N]; ll cnt[N]; void init() { A[0][0] = 1; for (ll i = 1; i <= n; i++) { A[i][0] = 1; for (ll j = 1; j <= i; j++) { A[i][j] = A[i][j - 1] * j % Mod; } } /* for (ll i = 1; i <= n; i++) { for (ll j = 1; j <= i; j++) { cout << A[i][j] << " "; } cout << endl; } */ for (ll i = 0; i <= n; i++) { for (ll j = 0; j <= n; j++) { if (j == 0 || i == j) C[i][j] = 1; else C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % Mod; } } for (ll i = 1; i <= n; i++) { cnt[(ll)s[i]]++; } /* for (ll i = 1; i <= n; i++) { cout << s[i] << " : " << cnt[(ll)s[i]] << "\n"; } */ } void work() { cin >> n; cin >> (s + 1); init(); /* for (ll i = 1; i <= n; i++) cout << s[i]; */ total = A[n][n]; ll tn = n / 2; ll tmp = 1, x = 0; for (char i = 'a'; i <= 'z'; i++) { if (cnt[(ll)i]) { x += (cnt[(ll)i] % 2); ll cur = cnt[(ll)i] / 2; tmp = tmp * C[tn][cur] % Mod * A[cnt[(ll)i]][cnt[(ll)i]] % Mod; tn -= cur; } } if (x > 1) { cout << total % Mod; } else { cout << ((total - tmp) + Mod) % Mod; } return; } signed main() { ios::sync_with_stdio(false); cin.tie(0); work(); return 0; } ``` 过了,警示后人,小心取模的问题
by haoyijie @ 2024-07-28 22:16:59


|