結果

問題 No.3682 きあいのハチマキ
コンテスト
ユーザー のらら
提出日時 2026-09-05 15:09:31
言語 C++23
(gcc 15.3.0 + boost 1.92.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 75 ms / 2,000 ms
+ 366µs
コード長 2,196 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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