結果

問題 No.3178 free sort
ユーザー daiota
提出日時 2025-06-13 21:54:42
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 9 ms / 2,000 ms
コード長 829 bytes
コンパイル時間 1,462 ms
コンパイル使用メモリ 165,888 KB
実行使用メモリ 8,748 KB
最終ジャッジ日時 2025-06-13 21:54:49
合計ジャッジ時間 3,100 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 40
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll,ll> P;
#define REP(i,n) for(ll i=0;i<ll(n);i++)






const ll MOD=998244353;
ll inv[200010],fac[200010],finv[200010];

void fact(){
	fac[0]=fac[1]=1;
	finv[0]=finv[1]=1;
	inv[1]=1;
	for(ll i=2;i<200005;i++){
		inv[i]=MOD-inv[MOD%i]*(MOD/i)%MOD;
		fac[i]=fac[i-1]* i%MOD;
		finv[i]=finv[i-1]*inv[i]%MOD;
	}
}




int main(void){
	cin.tie(nullptr);  ios_base::sync_with_stdio(false);
	ll i,j,k;



	string N;
	cin >> N;


	ll n=N.size();

	vector<ll> a(10);
	REP(i,n){
		a[N[i]-'0']++;
	}


	fact();


	ll ans=fac[n];
	REP(i,10){
		ans*=finv[a[i]];
		ans%=MOD;
	}


	if(a[0]==0){
		cout << ans << endl;
		return 0;
	}


	a[0]--;

	ll c=fac[n-1];
	REP(i,10){
		c*=finv[a[i]];
		c%=MOD;
	}



	cout << (ans-c+MOD)%MOD << endl;





	return 0;

}
0