結果

問題 No.3178 free sort
ユーザー tails
提出日時 2025-06-13 22:49:55
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 3,091 bytes
コンパイル時間 1,288 ms
コンパイル使用メモリ 28,416 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-06-13 22:49:58
合計ジャッジ時間 3,113 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 40
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: In function ‘main’:
main.c:6:59: warning: implicit declaration of function ‘write’ [-Wimplicit-function-declaration]
    6 | #define wt1(v) ({char wbuf[64],*wp=wbuf+sizeof wbuf;wt(v);write(1,wp,wbuf+sizeof wbuf-wp);})
      |                                                           ^~~~~
main.c:80:9: note: in expansion of macro ‘wt1’
   80 |         wt1(z);
      |         ^~~
main.c:81:9: warning: implicit declaration of function ‘_exit’ [-Wimplicit-function-declaration]
   81 |         _exit(0);
      |         ^~~~~
main.c:81: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 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 rep(v,e) for(typeof(e)v=0;v<e;++v)
#define reps(v,s,e) for(typeof(e)v=s;v<e;++v)

#define MD 998244353

typedef unsigned long ulong;

unsigned const fac[]={
        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,
};

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;
}

unsigned a[10];
unsigned b;

int main(){
	rd_init();
	for(int c;c=*rp++-'0',c>=0;){
		++a[c];
		++b;
	}
	ulong z=1;
	rep(i,10){
		z=z*fac[a[i]>>10]%MD;
		reps(j,a[i]&~0x3ff,a[i]){
			z=z*(j+1)%MD;
		}
	}
	z=inverse(z);
	z=z*fac[b>>10]%MD;
	reps(j,b-1&~0x3ff,b-1){
		z=z*(j+1)%MD;
	}
	z=z*(b-a[0])%MD;
	wt1(z);
	_exit(0);
}
0