結果

問題 No.2747 Permutation Adjacent Sum
ユーザー Series_205Series_205
提出日時 2024-04-20 14:41:26
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 2,314 ms / 3,000 ms
コード長 14,832 bytes
コンパイル時間 3,418 ms
コンパイル使用メモリ 220,596 KB
実行使用メモリ 19,032 KB
最終ジャッジ日時 2024-10-12 10:18:17
合計ジャッジ時間 45,091 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 819 ms
10,580 KB
testcase_01 AC 67 ms
6,816 KB
testcase_02 AC 523 ms
8,128 KB
testcase_03 AC 69 ms
6,820 KB
testcase_04 AC 892 ms
11,784 KB
testcase_05 AC 2,208 ms
18,736 KB
testcase_06 AC 968 ms
11,912 KB
testcase_07 AC 783 ms
9,908 KB
testcase_08 AC 1,348 ms
16,040 KB
testcase_09 AC 1,901 ms
16,940 KB
testcase_10 AC 222 ms
6,816 KB
testcase_11 AC 799 ms
12,148 KB
testcase_12 AC 6 ms
6,820 KB
testcase_13 AC 353 ms
6,820 KB
testcase_14 AC 1,216 ms
13,956 KB
testcase_15 AC 1,856 ms
17,252 KB
testcase_16 AC 847 ms
10,512 KB
testcase_17 AC 1,710 ms
17,300 KB
testcase_18 AC 1,636 ms
15,836 KB
testcase_19 AC 140 ms
6,820 KB
testcase_20 AC 882 ms
11,424 KB
testcase_21 AC 1,366 ms
14,672 KB
testcase_22 AC 1,477 ms
15,628 KB
testcase_23 AC 673 ms
11,072 KB
testcase_24 AC 722 ms
10,580 KB
testcase_25 AC 472 ms
8,736 KB
testcase_26 AC 1,231 ms
13,656 KB
testcase_27 AC 1,419 ms
15,076 KB
testcase_28 AC 1,326 ms
15,228 KB
testcase_29 AC 897 ms
12,068 KB
testcase_30 AC 2,196 ms
18,980 KB
testcase_31 AC 2,314 ms
19,032 KB
testcase_32 AC 2,192 ms
18,828 KB
testcase_33 AC 2,202 ms
18,956 KB
testcase_34 AC 2,198 ms
18,948 KB
testcase_35 AC 2 ms
6,820 KB
testcase_36 AC 2 ms
6,820 KB
testcase_37 AC 2 ms
6,816 KB
testcase_38 AC 2 ms
6,820 KB
testcase_39 AC 2 ms
6,816 KB
testcase_40 AC 2 ms
6,820 KB
testcase_41 AC 2 ms
6,820 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define FOR(i, l, r) for(ll i = l; i < r; i++)
#define rep(i, n) FOR(i, 0, n)
#define FORR(i, l, r) for(ll i = r - 1; i >= l; i--)
#define ALL(ar) begin(ar), end(ar)

template <typename T1, typename T2>
inline bool chmax(T1 &a, T2 b) {
    return a < b && (a = b, true);
}
template <typename T1, typename T2>
inline bool chmin(T1 &a, T2 b) {
    return a > b && (a = b, true);
}
template <typename T1, typename T2>
istream &operator>>(istream &is, pair<T1, T2> &p) {
    is >> p.first >> p.second;
    return is;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
    os << p.first << ' ' << p.second;
    return os;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
    for(T &x : v) is >> x;
    return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
    for(size_t i = 0; i < v.size(); i++) os << (i ? " " : "") << v[i];
    return os;
}
//-------------------------------------------------
template <typename T>
T floor(T a, T b) {
    return a / b - (a % b && (a ^ b) < 0);
}
template <typename T>
pair<T, T> divmod(T x, T y) {
    T q = floor(x, y);
    return {q, x - q * y};
}

int factorial998table[1024] = {
    1,         467742124, 703158536, 849331177, 183632821, 786787592, 708945888,
    623860151, 442444797, 339076928, 916211838, 827641482, 982515753, 303461550,
    466748179, 669060208, 789885751, 915736046, 189957301, 934038903, 728735046,
    774755699, 649374308, 602288735, 492352484, 958678776, 943233257, 148504501,
    352124178, 569334038, 927469492, 343841688, 432351202, 700916755, 170721982,
    8283809,   875807278, 931632987, 330722936, 603566523, 391470976, 157944106,
    826756015, 278928878, 178606531, 522053153, 175494307, 16217485,  310769109,
    430912024, 970167731, 302127847, 960178710, 607169580, 211863227, 918097328,
    664502958, 598427325, 415194799, 38321157,  375608821, 557298612, 497769749,
    114695383, 77784134,  629192790, 339438380, 348348875, 713806860, 526342541,
    671850855, 414726935, 844082152, 412454739, 351143550, 868784407, 834684152,
    186057224, 996072584, 619190001, 24770542,  765280770, 513490122, 468949120,
    867194196, 866447292, 937135640, 560788103, 308335177, 703539315, 252044620,
    119916775, 298069903, 43651994,  148641017, 730387621, 856452172, 74265901,
    626807500, 980602375, 42825068,  348086475, 162321900, 207340584, 151258454,
    461547160, 320321845, 361026143, 882876292, 842563318, 257705870, 158156446,
    292795459, 984763947, 917068833, 811332379, 782439665, 944504775, 298167161,
    141501910, 155584237, 149720256, 71954352,  666430555, 580966229, 884747116,
    616367471, 918981127, 310328833, 724405658, 383796145, 256700166, 487819118,
    642491144, 181867555, 524937737, 222137750, 445244561, 79921588,  253457448,
    405659726, 260707689, 740044210, 654653354, 229885020, 230551611, 616689587,
    939003921, 565960348, 904184966, 133298693, 859220865, 186139683, 765071679,
    247651638, 451157944, 929341123, 503724944, 768266737, 142218056, 910573117,
    274579400, 151387843, 212671109, 815271666, 406331931, 154251304, 642676789,
    570372925, 976277122, 442985463, 928799971, 817581666, 797627351, 100113334,
    877639265, 541537097, 434482347, 300960222, 270085755, 481153328, 236088097,
    686884498, 323505794, 897572220, 900787550, 277507290, 157634146, 892066519,
    616420589, 46056764,  697140618, 592483685, 896871487, 896388868, 106444279,
    115102765, 191484323, 62322499,  434613622, 426026852, 378184205, 194359325,
    415197585, 965735328, 598860936, 653751428, 942602959, 475099103, 642401460,
    77868208,  464952529, 549976420, 705774928, 635299526, 704085554, 809044086,
    670938184, 799176916, 58985566,  402328281, 182103192, 921913660, 674272214,
    428301920, 520916749, 127424638, 296779896, 166780239, 19634060,  95873539,
    708947606, 532272305, 980167862, 7015847,   370183454, 45567119,  866949818,
    374428494, 25583689,  351370758, 835388325, 232690098, 42002598,  17055285,
    985022727, 214528454, 122907290, 793349516, 609331634, 87133548,  248246624,
    448572380, 502875867, 183097664, 536117329, 170926160, 381772251, 37038194,
    374439881, 94285547,  880631489, 452052533, 739811514, 675382782, 587926712,
    179133902, 694266603, 338843576, 281485671, 813341519, 616512705, 222785194,
    382494725, 471654428, 961907947, 442140830, 702296161, 548575377, 388901073,
    19119024,  545916498, 947169254, 801677200, 377657430, 634980290, 246239186,
    13175103,  239754689, 656729178, 364003283, 646568868, 584909084, 690387116,
    452007054, 131381944, 908149670, 807287523, 802277179, 745423153, 893994782,
    197548253, 376096720, 105840336, 687751559, 170787791, 928507410, 620382696,
    446955151, 139665212, 882526402, 494793004, 107171423, 753993075, 467588754,
    207595897, 269813018, 941027990, 856873596, 717085190, 245280646, 792026805,
    548741735, 523767341, 637697735, 261200153, 89666563,  344573088, 15832984,
    558492246, 825051585, 923222974, 826620400, 558080789, 657328927, 991078225,
    706029275, 738905108, 401212366, 980043233, 895405022, 597894231, 636951913,
    947342478, 786075225, 395095090, 188433847, 121279219, 860403973, 396099425,
    240442489, 521535558, 280382318, 58023116,  735594008, 8696133,   477645338,
    223630480, 816606673, 680021043, 362424474, 181667447, 504295826, 332167472,
    766361494, 992840497, 417671938, 376941230, 11880047,  275790726, 106186450,
    150546053, 966438917, 431896075, 158021876, 734833661, 328332504, 632143386,
    962477966, 638741189, 728804571, 753715698, 20536106,  45105841,  271673172,
    982138522, 604809222, 199722980, 211807634, 478008419, 194715230, 246865373,
    316443541, 869035744, 202922168, 245262975, 136244583, 650969410, 566222746,
    55188168,  495968583, 571946805, 188658038, 353720239, 830419870, 669127165,
    86710835,  810103736, 630008035, 764354348, 209246227, 277861984, 725469211,
    151404581, 894191013, 775554083, 634671016, 170299187, 471849450, 575347258,
    505276194, 636730506, 40086858,  386228700, 789875034, 998219457, 359035788,
    843760715, 864829665, 794240359, 241486050, 48334220,  583177582, 714653706,
    617669563, 132782021, 779225352, 333301287, 520569296, 508276228, 689073648,
    573645847, 200419842, 911561316, 310562870, 204959007, 879280837, 762843188,
    103128368, 133300147, 648946778, 287218789, 662474952, 587555465, 105622721,
    648151526, 517033362, 729251452, 850555187, 708613432, 874408867, 345608416,
    690718720, 10813958,  42384375,  882264058, 825490058, 252850511, 652942840,
    202604098, 277615259, 862885671, 582470925, 190843016, 534488148, 187675153,
    911660635, 377262012, 642854978, 359397276, 712333871, 580131409, 841639861,
    925383257, 213683380, 25291651,  974815450, 32032244,  119030165, 443676106,
    555727293, 170519648, 171131074, 839941962, 789829593, 140975543, 845347712,
    303299112, 530420097, 857005350, 249174130, 224087061, 311280308, 404814306,
    567648772, 766512373, 470895965, 294358155, 625218604, 89534510,  513216330,
    78173719,  22818060,  254922573, 292417477, 415060121, 208989124, 960117615,
    570018845, 237661008, 442774488, 871349246, 161574942, 548661451, 313471555,
    448096394, 587422360, 987939533, 254478574, 113844945, 268886375, 927289435,
    664834607, 983476167, 390569280, 363763327, 935767957, 159015901, 508613041,
    134148582, 127417680, 484767855, 825835285, 43847241,  972918293, 151969014,
    768480291, 729490470, 76727400,  384998943, 648970509, 764966281, 391326774,
    585299643, 661473977, 530021579, 368308424, 81083443,  981417794, 185781362,
    169555925, 934957641, 56005264,  296483160, 853982963, 489694611, 73207251,
    20297311,  431253211, 168162850, 36271383,  689526671, 397669110, 705876730,
    785504919, 764896820, 936514026, 350141918, 784778738, 682324919, 140913543,
    862125900, 723248565, 369074340, 146936534, 226913694, 277886748, 856792647,
    13654547,  141461269, 255233971, 979535193, 747662027, 452683681, 338311679,
    399620140, 306913085, 817524367, 333578440, 943193170, 387930488, 964713035,
    554372227, 524201507, 267870305, 698863503, 695139108, 399857384, 830659092,
    479624682, 594238820, 768224890, 956955770, 940576967, 920740072, 282055556,
    621677930, 847367415, 619094041, 432519599, 192780811, 912052381, 263304046,
    114280963, 307107320, 956809356, 118706101, 836710721, 356893069, 427113038,
    55360495,  892694364, 443807400, 568616581, 130165565, 732273554, 778059496,
    95936679,  629634134, 383940143, 474733431, 271200931, 253893765, 65679204,
    670721645, 268831988, 225698685, 424701963, 654858732, 405695790, 894299102,
    797306377, 464723449, 647679843, 730366154, 956550665, 898568348, 313188681,
    661403769, 346715295, 358990430, 868898456, 719464962, 978551995, 772931269,
    255694712, 379904456, 393101377, 130818973, 810783770, 78951115,  608848341,
    941552927, 523163696, 581658405, 188869913, 161971620, 114600913, 300038465,
    126906968, 572973411, 118017645, 806069307, 430432761, 310699012, 989119052,
    282768145, 557792692, 611036992, 427168405, 84497995,  529589599, 967936672,
    416953197, 549641787, 787274930, 514952744, 646568513, 39329263,  765390776,
    831388678, 299074396, 102522509, 886062498, 598990751, 553048069, 305737423,
    388746841, 13007805,  3445560,   568306294, 109543305, 847740132, 746222360,
    454654676, 748993028, 222910140, 861308982, 390243513, 692742883, 789475199,
    153430402, 299806798, 913070840, 881332402, 245792511, 618823409, 1817990,
    897836424, 726794141, 700802042, 472214481, 97004031,  479899815, 573979309,
    752576644, 374801082, 599964908, 894966385, 178103304, 12240556,  393873628,
    855241924, 305678131, 971858774, 281586141, 87362107,  41844894,  175133514,
    276243521, 997376957, 260427125, 439339251, 64661516,  362212695, 186181824,
    423316311, 267640938, 299252572, 810040987, 857956827, 758991665, 207700847,
    399398818, 747579039, 814755712, 298373935, 307448236, 42074518,  982127624,
    538863790, 528558929, 96501138,  813255509, 611769398, 710541518, 408153968,
    675346745, 970094012, 791931126, 811516976, 618049736, 264048084, 209805699,
    909045292, 645349311, 416989597, 590393407, 320547207, 342653696, 860169617,
    856611053, 475149267, 124801433, 547187333, 466598598, 266454901, 554467907,
    868909135, 199244107, 548833449, 20952517,  234169026, 117025205, 804238552,
    205574540, 590283297, 822322644, 866010856, 477388420, 935768507, 424373916,
    951967787, 344871828, 133969287, 937034425, 309380768, 666909962, 726492795,
    996576193, 883938945, 869749688, 313581344, 65216237,  88860786,  208895640,
    888760811, 854567609, 328142793, 121852766, 928690075, 135269006, 333105486,
    502240551, 573712984, 397698082, 935117672, 718828733, 440474396, 335628894,
    184935718, 788258676, 646732201, 68099895,  167036421, 362572358, 787671392,
    666366534, 193503119, 74429287,  132805884, 796935846, 124574194, 926012440,
    147265585, 722608579, 526866610, 452261307, 990444071, 4595579,   147427028,
    774597449, 678783012, 568563934, 383628463, 68242206,  163493293, 352851801,
    123192034, 529859554, 14733470,  565063217, 178575398, 580871309, 135817500,
    313966456, 647215844, 118781836, 106243172, 796669460, 48496927,  772979683,
    715961917, 546863206, 601711799, 644312478, 629259662, 738295002, 692301787,
    149995411, 864799423, 284186171, 246177326, 268779154, 86400350,  518698490,
    321709079, 946212693, 800553099, 865864136, 244789848, 386206318, 851633075,
    713794602, 131117952, 280474884, 243820970, 820033654, 399700655, 825581574,
    443639603, 774376660, 362476217, 552383080, 436759518, 538430048, 965968656,
    150434699, 563163603, 352073025, 840124972, 152029247, 902082055, 770264937,
    747653807, 934664232, 541451013, 807031739, 854866728, 503502641, 283479207,
    297947602, 488469464, 205196166, 381583984, 108455782, 570592132, 363674728,
    134077711, 356931610, 887112858, 273780969, 443297964, 650953636, 402662299,
    894089640, 71844431,  33030748,  208583995, 597099208, 671156881, 875032178,
    998244352, 0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0,         0,         0,         0,         0,         0,
    0,         0};

int factorial998(ll n) {
    constexpr int mod = 998244353;
    if(n >= mod) return 0;
    auto [q, r] = divmod<int>(n, 1 << 20);
    ll x = factorial998table[q];
    int s = q << 20;
    rep(i, r) x = x * (s + i + 1) % mod;
    return x;
}

ll mo = 998244353;
ll P[1010101];
ll fact[1010101];

inline int mulmod(int a, int b, int mo) {
    int d, r;
    if(a == 0 || b == 0) return 0;
    if(a == 1 || b == 1) return max(a, b);
    __asm__(
        "mull %4;"
        "divl %2"
        : "=d"(r), "=a"(d)
        : "r"(mo), "a"(a), "d"(b));
    return r;
}

int modpow(int a, int n = mo - 2) {
    int r = 1;
    while(n) r = mulmod(r, (n % 2) ? a : 1, mo), a = mulmod(a, a, mo), n >>= 1;
    return r;
}

ll solve_(ll N, ll K) {
    int i, j, k, l, r, x, y;
    string s;

    // cin >> N >> K;

    fact[0] = 1;
    for(i = 1; i <= K + 1; i++) {
        (P[i] = modpow(i, K) + P[i - 1]) %= mo;
        fact[i] = fact[i - 1] * i % mo;
    }

    if(N <= K + 1) return P[N];
    N = N % mo + mo;

    ll ret = 0;
    ll A = 1;
    for(i = 0; i <= K + 1; i++) A = A * (N - i) % mo;

    for(i = 0; i <= K + 1; i++) {
        ll v = P[i] * A % mo * modpow(N - i) % mo;
        ll w = fact[K + 1 - i] * fact[i] % mo;
        v = v * modpow(w) % mo;

        if(i % 2 != (K + 1) % 2)
            ret = (ret + mo - v) % mo;
        else
            ret = (ret + v) % mo;
    }

    // cout << ret << endl;
    return ret;
}

void solve() {
    ll n, k;
    cin >> n >> k;

    ll a = solve_(n, k) * n % mo - solve_(n, k + 1) % mo;
    a += mo;
    a %= mo;

    a = a * 2 * factorial998(n - 1) % mo;

    cout << a << endl;
}

int main() {
    int t = 1;
    // cin >> t;
    while(t--) solve();
}
0