結果
問題 | No.1547 [Cherry 2nd Tune *] 偶然の勝利の確率 |
ユーザー |
|
提出日時 | 2021-06-13 17:22:32 |
言語 | C# (.NET 8.0.404) |
結果 |
AC
|
実行時間 | 661 ms / 2,000 ms |
コード長 | 3,582 bytes |
コンパイル時間 | 17,243 ms |
コンパイル使用メモリ | 167,164 KB |
実行使用メモリ | 186,668 KB |
最終ジャッジ日時 | 2024-12-23 06:04:40 |
合計ジャッジ時間 | 20,700 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (206 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
using System;using System.Collections.Generic;using static System.Console;using System.Linq;class yc299{static int[] NList => ReadLine().Split().Select(int.Parse).ToArray();static int[][] NMap(int n) => Enumerable.Repeat<int>(0, n).Select(_ => NList).ToArray();static void Main(){var x = NList;var y = NList;var k = NList[0];var (ma, na, s) = (x[0], x[1], x[2]);var (mb, nb, t) = (y[0], y[1], y[2]);var key = 998244353;var revna = PowMod(na, key - 2, key);var revnb = PowMod(nb, key - 2, key);var amap = AMap(s + t + 1, ma, revna, key);var bmap = BMap(s + t + 1, mb, revnb, key);var nmap = Mul(bmap, amap, key);var dp = new long[s + t + 1];dp[t] = 1;var tmp = k;while (tmp > 0){if (tmp % 2 == 1){dp = Mul(nmap, dp, key);}nmap = Mul(nmap, nmap, key);tmp >>= 1;}WriteLine(dp.Last());WriteLine(dp[0]);}static long[,] AMap(int size, int ma, int revna, int key){var amap = new long[size, size];amap[0, 0] = 1;amap[size - 1, size - 1] = 1;for (var y = 1; y < size - 1; ++y){var poss = (long)ma * revna % key;var val = 1L;var rev = (1 + key - poss) % key;for (var x = y; x < size - 1; ++x){amap[x, y] = val * rev % key;val = (val * ma % key) * revna % key;}amap[size - 1, y] = val;}return amap;}static long[,] BMap(int size, int mb, int revnb, int key){var bmap = new long[size, size];bmap[0, 0] = 1;bmap[size - 1, size - 1] = 1;for (var y = size - 2; y > 0; --y){var poss = (long)mb * revnb % key;var val = 1L;var rev = (1 + key - poss) % key;for (var x = y; x > 0; --x){bmap[x, y] = val * rev % key;val = (val * mb % key) * revnb % key;}bmap[0, y] = val;}return bmap;}static long[,] Mul(long[,] a, long[,] b, int key){var h = a.GetLength(0);var w = b.GetLength(1);var cm = a.GetLength(1);var map = new long[h, w];for (var i = 0; i < h; ++i){for (var j = 0; j < w; ++j){for (var c = 0; c < cm; ++c){map[i, j] = (map[i, j] + a[i, c] * b[c, j]) % key;}}}return map;}static long[] Mul(long[,] a, long[] list, int key){var len = a.GetLength(0);var res = new long[len];for (var i = 0; i < len; ++i) for (var j = 0; j < list.Length; ++j){res[i] = (res[i] + a[i, j] * list[j]) % key;}return res;}static int PowMod(int n, int p, int keyNum){long _n = n % keyNum;var _p = p;var result = 1L;if ((_p & 1) == 1){result *= _n;}while (_p > 0){_n = _n * _n % keyNum;_p >>= 1;if ((_p & 1) == 1){result = (result * _n) % keyNum;}}return (int)result;}}