-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Convolution を実装 #53
Convolution を実装 #53
Conversation
ありがとうございます!
static class Test
{
public static int StaticField = GenerateInt();
static int GenerateInt() { Console.WriteLine("Init"); return 1; };
static Test() { }
} |
return m switch | ||
{ | ||
2 => 1, | ||
167772161 => 3, | ||
469762049 => 3, | ||
754974721 => 11, | ||
998244353 => 3, | ||
_ => Calculate(m) | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
private static Dictionary<int, int> s_cache = new Dictionary<int, int>
{
{ 2, 1 },
{167772161, 3},
{469762049, 3},
{754974721, 11},
{998244353, 3},
};
を用意して、
if(s_cache.TryGetValue(m, out int r)) return r;
s_cache[m] = Calculate(m);
とキャッシュしても良いかなと思います。
長いコードにも関わらず、丁寧にご確認頂きありがとうございます!
私も静的フィールドへの直書きと迷って、一応C++版に寄せた書き方にしておくか……程度の動機だったのですが、やっぱりそちらの方が簡潔そうですね。
修正まで今しばらくお待ち頂ければと思います。よろしくお願いします。 |
上記3件を反映しました。改めて愚直解と一致することを確認済みです。 |
確認しました!ありがとうございます。 |
一つだけ気になったのですが、 PowMod は Math で実装されているものを使用しないのですか…?(昨日指摘できずに申し訳ありません。) |
C++版の |
なるほど、Burret 演算を使ってないのは constexpr を適用できるようにするための名残だったんですね。(昨日見たときは型でも違うのかと思ってスルーしてしまってました。)ありがとうございます🙇 |
Take consistent with Queue<T>.Enqueue Fix #53
Convolution を実装しました。 #11
処理の内容はほぼC++版に沿っています。
Convolution.cs の実装に加え、以下の4ファイルを
Internal/Math
フォルダ下に追加しました。mod 998244353 のケースについてのみではありますが、以下で動作確認を行いました。
int[] Convolution(int[] a, int[] b)
版: https://atcoder.jp/contests/practice2/submissions/16771760ModInt[] Convolution<T>(ModInt[] a, ModInt[] b)
版: https://atcoder.jp/contests/practice2/submissions/16771727また、簡単にではありますが、以下のようなコードでランダムな入力・数パターンのmodに対しナイーブな解法との整合性を確認しています。
テストコード
よろしくお願いします。