Submission #33929839
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/convolution>
using mint=atcoder::modint998244353;
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
#define per(i,a,n) for (ll i=n;i-->(ll)a;)
#define pb push_back
ll read(){ll r;scanf("%lld",&r);return r;} // read
const int N = 200000;
ll a[N+10];
mint fac[2*N+10] = {1}; // fac[i] = i!
mint ifac[2*N+10]; // ifac[i] = 1/i!
vector<mint> polys[N+10]; // 总长 <= O(n + k)
int idxs[N+10];
mint C(int n,int m){return fac[n]*ifac[m]*ifac[n-m];}
ll n; // 2e5
ll m; // 2e5
ll k; // 2e5
// 本质就是 尽量小乘小, 大乘大, 不要大量 大*小
vector<mint> solve(ll l,ll r) {
if(l == r) return polys[idxs[l]];
auto res = atcoder::convolution(solve(l,(l+r)/2),solve((l+r)/2+1,r));
if((int)res.size() > m-k+1) res.resize(m-k+1);
return res;
}
int main() {
rep(i,1,2*N+1) fac[i] = fac[i-1]*i;
ifac[2*N] = fac[2*N].inv();
per(i,0,2*N) ifac[i] = ifac[i+1]*(i+1);
n = read(); // 2e5
m = read(); // 2e5
k = read(); // 2e5
rep(i,0,k) a[i] = read();
if(k==0) { // f_3(n,m) * m!
printf("%d\n",(C(n+m-1,2*m-1) * fac[m]).val()); // f_3 * (无序变有序 * m!)
return 0;
}
rep(i,0,k-1) { // f_1
ll len = a[i+1]-a[i]+1; // 区间长度, 两端已经放了
rep(seg,0,len-1) polys[i].pb(C(len+seg-1,2*seg+1)); // 中间自由的元素个数
}
rep(i,0,2) { // f_2 首尾
auto len = (i==0) ? a[0] : (n-a[k-1]+1);
polys[k-1+i]= {1};
rep(seg,1,len) polys[k-1+i].pb(C(len+seg-1,2*seg));
}
iota(idxs,idxs+k+1,0);
// random_shuffle(idxs, idxs+k+1); // 随机, 防止被炸
vector <mint> ans = solve(0,k);
printf("%d\n",(ans[m-k] * fac[m-k]).val()); // 无序变有序 * (m-k)!
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | H - Social Distance 2 |
| User | cromarmot |
| Language | C++ (GCC 9.2.1) |
| Score | 600 |
| Code Size | 1822 Byte |
| Status | AC |
| Exec Time | 160 ms |
| Memory | 20176 KiB |
Compile Error
./Main.cpp: In function ‘ll read()’:
./Main.cpp:12:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
12 | ll read(){ll r;scanf("%lld",&r);return r;} // read
| ~~~~~^~~~~~~~~~~
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example0.txt, example1.txt, example2.txt |
| All | 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, 050.txt, 051.txt, 052.txt, 053.txt, 054.txt, 055.txt, 056.txt, 057.txt, 058.txt, 059.txt, 060.txt, 061.txt, 062.txt, 063.txt, 064.txt, 065.txt, 066.txt, example0.txt, example1.txt, example2.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 000.txt | AC | 16 ms | 11516 KiB |
| 001.txt | AC | 14 ms | 11536 KiB |
| 002.txt | AC | 16 ms | 11588 KiB |
| 003.txt | AC | 14 ms | 11488 KiB |
| 004.txt | AC | 14 ms | 11424 KiB |
| 005.txt | AC | 13 ms | 11532 KiB |
| 006.txt | AC | 14 ms | 11536 KiB |
| 007.txt | AC | 14 ms | 11520 KiB |
| 008.txt | AC | 14 ms | 11440 KiB |
| 009.txt | AC | 20 ms | 11476 KiB |
| 010.txt | AC | 15 ms | 11596 KiB |
| 011.txt | AC | 62 ms | 20176 KiB |
| 012.txt | AC | 55 ms | 19536 KiB |
| 013.txt | AC | 28 ms | 13324 KiB |
| 014.txt | AC | 18 ms | 12184 KiB |
| 015.txt | AC | 38 ms | 15264 KiB |
| 016.txt | AC | 43 ms | 16924 KiB |
| 017.txt | AC | 34 ms | 14748 KiB |
| 018.txt | AC | 34 ms | 15448 KiB |
| 019.txt | AC | 32 ms | 14856 KiB |
| 020.txt | AC | 38 ms | 15488 KiB |
| 021.txt | AC | 40 ms | 15408 KiB |
| 022.txt | AC | 43 ms | 15392 KiB |
| 023.txt | AC | 49 ms | 16108 KiB |
| 024.txt | AC | 31 ms | 14344 KiB |
| 025.txt | AC | 43 ms | 14904 KiB |
| 026.txt | AC | 47 ms | 17152 KiB |
| 027.txt | AC | 51 ms | 18668 KiB |
| 028.txt | AC | 37 ms | 14268 KiB |
| 029.txt | AC | 47 ms | 17152 KiB |
| 030.txt | AC | 45 ms | 16908 KiB |
| 031.txt | AC | 39 ms | 15544 KiB |
| 032.txt | AC | 55 ms | 20016 KiB |
| 033.txt | AC | 27 ms | 13012 KiB |
| 034.txt | AC | 28 ms | 13248 KiB |
| 035.txt | AC | 87 ms | 18096 KiB |
| 036.txt | AC | 127 ms | 14840 KiB |
| 037.txt | AC | 136 ms | 15848 KiB |
| 038.txt | AC | 153 ms | 18676 KiB |
| 039.txt | AC | 147 ms | 16324 KiB |
| 040.txt | AC | 26 ms | 12380 KiB |
| 041.txt | AC | 49 ms | 12412 KiB |
| 042.txt | AC | 19 ms | 11784 KiB |
| 043.txt | AC | 92 ms | 15856 KiB |
| 044.txt | AC | 87 ms | 13132 KiB |
| 045.txt | AC | 101 ms | 17512 KiB |
| 046.txt | AC | 101 ms | 17520 KiB |
| 047.txt | AC | 154 ms | 18520 KiB |
| 048.txt | AC | 156 ms | 18596 KiB |
| 049.txt | AC | 153 ms | 18120 KiB |
| 050.txt | AC | 154 ms | 17992 KiB |
| 051.txt | AC | 152 ms | 17768 KiB |
| 052.txt | AC | 125 ms | 13856 KiB |
| 053.txt | AC | 133 ms | 16792 KiB |
| 054.txt | AC | 124 ms | 14460 KiB |
| 055.txt | AC | 86 ms | 16576 KiB |
| 056.txt | AC | 87 ms | 16524 KiB |
| 057.txt | AC | 54 ms | 15372 KiB |
| 058.txt | AC | 54 ms | 15792 KiB |
| 059.txt | AC | 135 ms | 16480 KiB |
| 060.txt | AC | 136 ms | 16560 KiB |
| 061.txt | AC | 156 ms | 16752 KiB |
| 062.txt | AC | 155 ms | 16936 KiB |
| 063.txt | AC | 160 ms | 16576 KiB |
| 064.txt | AC | 144 ms | 15500 KiB |
| 065.txt | AC | 158 ms | 17144 KiB |
| 066.txt | AC | 155 ms | 16404 KiB |
| example0.txt | AC | 13 ms | 11472 KiB |
| example1.txt | AC | 15 ms | 11436 KiB |
| example2.txt | AC | 13 ms | 11524 KiB |