結果
| 問題 | No.3682 きあいのハチマキ |
| コンテスト | |
| ユーザー |
のらら
|
| 提出日時 | 2026-09-05 15:09:31 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0) |
| 結果 |
AC
|
| 実行時間 | 75 ms / 2,000 ms |
| + 366µs | |
| コード長 | 2,196 bytes |
| 記録 | |
| コンパイル時間 | 3,041 ms |
| コンパイル使用メモリ | 264,520 KB |
| 実行使用メモリ | 9,764 KB |
| 最終ジャッジ日時 | 2026-09-05 15:09:40 |
| 合計ジャッジ時間 | 4,473 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 2 |
ソースコード
#include <iostream>
#include <algorithm>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
//#define endl "\n";
using mint = atcoder::modint998244353;
const int MAX = 510000;
mint fac[MAX], finv[MAX], inv[MAX];
//1 <= r <= n <= 10^7くらい
void setup_fac_finv_inv() {
fac[0] = fac[1] = 1;
finv[0] = finv[1] = 1;
inv[1] = 1;
for(int i = 2; i < MAX; i++){
fac[i] = fac[i - 1] * i;
inv[i] = mint(1)/mint(i);
finv[i] = finv[i - 1] * inv[i];
}
}
mint combi_mod(long long n, long long r){
if(n < r) return mint(0);
if(n < 0 || r < 0) return mint(0);
if(n < MAX){
//nもrも小さい時
return fac[n] * finv[r] * finv[n - r];
}else{
//nが大きい時.r<=10^7程度まで
mint ret = mint(1);
for(long long j = n; j > n - r; j--){
ret = ret * j;
}
return ret * finv[r];
}
}
mint power_mod(mint x, long long y){
if(y == 0) return mint(1);
if(y == 1) return x;
long long ty = y / 2;
long long ry = y % 2;
mint ret = power_mod(x, ty);
ret = ret * ret;
if(ry == 1) return ret * x;
else return ret;
}
int main(){
ll Q;
cin >> Q;
for(int q = 1; q <= Q; q++){
ll ha, ac, sc, hg, ag, sg;
cin >> ha >> ac >> sc >> hg >> ag >> sg;
//残りa以下になるまで減らす
ll t = min((hg - 1) / ac, (ha - 1) / ag);
ha -= ag * t;
hg -= ac * t;
//cout << t << " " << ha << " " << hg << endl;
mint ans = 0;
//1ずつになるまで
mint kakeru = 1;
if((hg - 1) / ac > 0){
kakeru = power_mod(mint(1) / mint(10), (hg - 1) / ac);
}
if((ha - 1) / ag > 0){
ans += mint(1) - power_mod(mint(1) / mint(10), (ha - 1) / ag);
kakeru = power_mod(mint(1) / mint(10), (ha - 1) / ag);
}
//cout << kakeru.val() << endl;
if(sc == sg){
//1212
ans += kakeru * mint(1) / mint(2);
}
if(sc > sg){
ans += kakeru * mint(10) / mint(11);
}
if(sc < sg){
ans += kakeru * mint(1) / mint(11);
}
cout << ans.val() << endl;
}
return 0;
}
のらら