結果

問題 No.2409 Strange Werewolves
ユーザー tailstails
提出日時 2023-08-12 00:36:07
言語 C90
(gcc 11.4.0)
結果
AC  
実行時間 1 ms / 2,000 ms
コード長 7,340 bytes
コンパイル時間 806 ms
コンパイル使用メモリ 25,216 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-18 20:19:52
合計ジャッジ時間 1,470 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 0 ms
5,248 KB
testcase_02 AC 1 ms
5,248 KB
testcase_03 AC 0 ms
5,248 KB
testcase_04 AC 0 ms
5,248 KB
testcase_05 AC 1 ms
5,248 KB
testcase_06 AC 0 ms
5,248 KB
testcase_07 AC 0 ms
5,248 KB
testcase_08 AC 0 ms
5,248 KB
testcase_09 AC 0 ms
5,248 KB
testcase_10 AC 0 ms
5,248 KB
testcase_11 AC 1 ms
5,248 KB
testcase_12 AC 1 ms
5,248 KB
testcase_13 AC 1 ms
5,248 KB
testcase_14 AC 0 ms
5,248 KB
testcase_15 AC 1 ms
5,248 KB
testcase_16 AC 0 ms
5,248 KB
testcase_17 AC 1 ms
5,248 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: In function ‘main’:
main.c:7:59: warning: implicit declaration of function ‘write’ [-Wimplicit-function-declaration]
    7 | #define wt1(v) ({char wbuf[64],*wp=wbuf+sizeof wbuf;wt(v);write(1,wp,wbuf+sizeof wbuf-wp);})
      |                                                           ^~~~~
main.c:636:9: note: in expansion of macro ‘wt1’
  636 |         wt1(y*fac(x)%MD*inverse(fac(x-z)*fac(z)%MD)%MD*fac(x+y+~z)%MD);
      |         ^~~
main.c:637:9: warning: implicit declaration of function ‘_exit’ [-Wimplicit-function-declaration]
  637 |         _exit(0);
      |         ^~~~~
main.c:637:9: warning: incompatible implicit declaration of built-in function ‘_exit’ [-Wbuiltin-declaration-mismatch]

ソースコード

diff #

#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")

#define rd_init() char*rp=({char*mmap();mmap(0l,1l<<25,1,2,0,0ll);})
#define rd() ({long _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;})
#define wt(v) ({ulong _z=v;do*--wp=_z%10+48;while(_z/=10);})
#define wt1(v) ({char wbuf[64],*wp=wbuf+sizeof wbuf;wt(v);write(1,wp,wbuf+sizeof wbuf-wp);})
#define MD 998244353

typedef unsigned long ulong;

int inverse(int a){
	int b=MD;
	int u=1;
	int v=0;
	int s,t;
	while(b){
		t=a/b;
		s=b; b=a-t*b; a=s;
		s=v; v=u-t*v; u=s;
	}
	if(u<0){
		u+=MD;
	}
	return u;
}

ulong fac(ulong n){
	static unsigned const fac10[]={
        1,
941747501,
776540593,
210672823,
690071003,
 46617525,
213768760,
693968959,
 80489582,
706932617,
794151417,
465499254,
696674125,
679081391,
691448896,
713797428,
275558954,
609927147,
557311239,
831274938,
893291440,
167105676,
415665360,
192812445,
680052439,
557094195,
688128904,
792752264,
192208002,
847923750,
 28263099,
728717984,
491684840,
336918851,
633366503,
758306641,
296930470,
699020919,
910172402,
905192639,
792232676,
535935445,
410591335,
810793504,
856039476,
765650325,
702144816,
374640872,
197994359,
320889851,
883115987,
151590670,
245098264,
286989423,
729221238,
511226407,
874957813,
979489918,
228248737,
453190470,
223927796,
852989243,
 50287712,
509033048,
243625084,
 40159580,
655302994,
829942035,
299277458,
 86622874,
109276119,
 75894103,
424113548,
567421291,
676588086,
620367716,
815463188,
 44143218,
810930880,
   499782,
416513770,
 59750787,
280879191,
113328955,
910641127,
542089438,
873391271,
 49111081,
422655771,
749741439,
838916518,
825928836,
422316600,
445140078,
135792920,
796315921,
334523653,
505750213,
745454889,
284439669,
264422227,
488144299,
264594887,
332021570,
256723915,
768304408,
506153085,
533770970,
929732704,
471614028,
243021423,
 36822049,
195608626,
792193516,
215245367,
588445499,
 10232161,
974583034,
843169718,
 33517339,
744867256,
422042779,
971678608,
929209828,
740055526,
129980885,
404829672,
225807005,
528205456,
240143253,
706174821,
263068586,
794757329,
221639463,
240967815,
 20047837,
331134934,
127470054,
793695956,
210565051,
959206504,
138448490,
667121261,
136048183,
226620404,
692730832,
887464126,
715216840,
786895056,
680299255,
592465564,
104271019,
241786040,
302567286,
781777622,
695362768,
267443112,
 60985765,
733684226,
937002588,
298149860,
170166008,
805749567,
 79282620,
437665466,
386653062,
754588014,
265310082,
 81266867,
109466639,
595236940,
591251736,
755288980,
912652888,
460141120,
759221877,
825572784,
 18194464,
368427783,
571463817,
553552793,
218414240,
  8897606,
791219964,
987232136,
626678298,
363848504,
 23298153,
623570515,
506916981,
151639897,
269752482,
341219264,
108067268,
360379612,
245950594,
 64405509,
799733966,
607922664,
255515653,
169008059,
832297534,
475858276,
990269468,
 56687032,
487125465,
715077943,
946099639,
419973380,
 30892688,
823299765,
890460664,
875848715,
155161884,
374508954,
548318802,
921787093,
698253774,
302647199,
259167661,
143814525,
129489686,
795264610,
975222339,
968512986,
345514813,
646295751,
970375323,
591627665,
300860854,
909331562,
720624591,
385294700,
  7631741,
443276555,
350397413,
827870055,
225714870,
401347161,
 77749271,
597036959,
606229862,
154326026,
361671183,
413774614,
227075193,
608071418,
914590447,
407447508,
552058576,
 47474609,
386778642,
758202478,
385950691,
703740000,
966684774,
546362027,
298705630,
676952658,
326449356,
843917452,
242409430,
587833706,
 40469219,
210585234,
354879640,
771230526,
 34097422,
102287772,
902362543,
722263693,
814944322,
451297925,
902863475,
817029670,
905023960,
555424886,
272662632,
394766353,
666370092,
206219158,
 15110235,
976379739,
965535222,
935252937,
650991646,
958967237,
363182237,
233817196,
344617468,
791123841,
630913138,
726529184,
562573003,
563061146,
792960341,
994145576,
230805329,
299465420,
259430953,
179251015,
566371622,
567895990,
558709601,
401533746,
472680587,
807075382,
388625548,
342362854,
714080723,
354518461,
501335155,
921205714,
245572383,
995121871,
597206529,
697042204,
260992104,
462829184,
 62381294,
 98950871,
913320293,
752117967,
982560320,
257419215,
463752698,
697205827,
656377881,
419290152,
856531770,
447197724,
657965581,
404661208,
722130014,
899687713,
718707067,
430330393,
639106400,
834964009,
902887941,
810884366,
650679669,
328559029,
108952421,
175250094,
141508696,
394269300,
 94451378,
262192347,
556407145,
661623397,
656765174,
893733886,
359124883,
407147338,
808451311,
157717476,
949408897,
371377907,
798014486,
870707644,
 11124205,
741182897,
157137689,
593507555,
598520569,
306478687,
 42984407,
411434960,
116335798,
367793469,
345378248,
332981554,
863453067,
588666836,
607696540,
175011207,
886178571,
387142464,
568865780,
148884679,
477839356,
859137664,
898399404,
 46230887,
716245342,
919506383,
429269215,
489098767,
920899704,
397809292,
323931347,
417053198,
292836984,
916151861,
903880874,
530159990,
969165939,
930377972,
143032010,
308745688,
229058228,
904049457,
 60317698,
729051789,
192106544,
936997143,
184865547,
169635803,
457399664,
408032575,
961424900,
378907963,
965079378,
946148009,
745479287,
341457669,
573316525,
140488077,
559501368,
217284569,
576419480,
775027508,
235369686,
852776706,
238333284,
188364228,
154707197,
555869026,
259713631,
976997327,
135089920,
637108313,
605899300,
425299135,
630257864,
414103956,
979668540,
465614154,
736566528,
578651185,
500126788,
 80473976,
482476368,
671936429,
 35129612,
389885031,
703915264,
423047129,
748946352,
989296698,
  3993118,
974224703,
841241239,
932795359,
258719575,
251469715,
 16846321,
829202764,
  9295132,
213896299,
331463491,
472169457,
817096142,
274013552,
803636696,
940028364,
742052578,
854664711,
615518321,
593217956,
761584448,
355182187,
843893299,
269045370,
953802150,
 37568955,
542668251,
606642174,
349512365,
736272199,
770343238,
300023457,
658958330,
122738470,
738075352,
594519714,
497862531,
938212102,
435561555,
918773761,
884365386,
579355058,
354020897,
592394585,
827412134,
973741053,
589739172,
312826770,
337102791,
527832013,
824911332,
521867730,
 61667222,
 55417785,
731992906,
378154470,
145250909,
177299477,
 98768957,
991600964,
978388836,
495787634,
474558986,
672353832,
253475753,
196214303,
536802012,
449818931,
550681984,
 98005228,
292553790,
222817032,
691608599,
638418413,
156543041,
443440271,
943694930,
  1316251,
111637293,
427974745,
726491902,
 48389379,
599921716,
420509798,
651853658,
 88490275,
417224036,
963106927,
199002083,
165867002,
645430252,
816535156,
692541078,
900972774,
266960681,
341241584,
821525955,
133464546,
  6636983,
149464497,
229216326,
812413066,
252821803,
 36405236,
639255352,
967552244,
151984988,
116774694,
321750932,
874814096,
484127291,
614908099,
973071400,
192216885,
351532941,
920720784,
748896212,
493940100,
741160184,
403825582,
227938660,
921368915,
416202451,
126428415,
675655870,
662918350,
480606683,
605800134,
215010628,
545337822,
258597915,
963284809,
559623501,
494269864,
254859157,
	};
	ulong z=fac10[n>>10];
	for(;n&1023;--n){
		z=z*n%MD;
	}
	return z;
}

int main(){
	rd_init();
	ulong x=rd();
	ulong y=rd();
	ulong z=rd();
	ulong w=rd();
	if(w){
		z=w;
		w=x;
		x=y;
		y=w;
	}
	wt1(y*fac(x)%MD*inverse(fac(x-z)*fac(z)%MD)%MD*fac(x+y+~z)%MD);
	_exit(0);
}
0