atcoder#ARC148F. [ARC148F] 998244353 → 1000000007

[ARC148F] 998244353 → 1000000007

题目描述

この問題は output-only です。

符号無し 64 bit 整数の加算・乗算・ 998244353 998244353 を除数とする modulo 演算ができるプログラミング言語があります。
この言語を用いて mod 1000000007 \text{mod\ }1000000007 における乗算を行うプログラムを作成してください。

厳密に説明すると、0 0 以上 1000000006 1000000006 以下の整数 a,b a,b が与えられたときに a × b mod1000000007 a\ \times\ b\ \bmod{1000000007} を計算するプログラムを、以下の 仕様形式 に従って作成してください。

输入格式

標準入力から与えられる入力は空である。

输出格式

問題文に書かれている仕様・形式に従ったプログラムを出力せよ。

题目大意

这是一道提交答案题。

hhoppitree 有一台计算机和 2626无符号 64\textbf{64} 位变量(也就是说,运算过程中所有的计算都会 264\textbf 2^{\textbf {64}} 取模),名字分别为 AZA\sim Z

初始时,AABB 中分别存储着两个数 aabb,他想用以下三种操作使得变量 CC 中的值为 a×bmod1000000007a\times b\bmod 1000000007

  • add x y z\colorbox{f0f0f0}{\verb!add x y z!}:将变量 xx 的值赋为变量 yy 的值和变量 zz 的值的和。

  • mul x y z\colorbox{f0f0f0}{\verb!mul x y z!}:将变量 xx 的值赋为变量 yy 的值和变量或常量 zz 的值的积。

  • rem x y\colorbox{f0f0f0}{\verb!rem x y!}:将变量 xx 的值赋为变量 yy 的值对 998244353998244353 取模后的值。

请利用以上三种语句写出一个 100\mathbf{100} 行以内的伪代码,使得它能计算出 a×bmod1000000007a\times b\bmod1000000007 的值,并存储在变量 CC 中。


5
mul C A B
rem C C
add A A 10
add D 2 B
add E 1 0

提示

プログラムの仕様

このプログラムでは、英大文字で表される A, B, , Z A,\ B,\ \dots,\ Z 26 26 個の 変数 を扱うことが出来る。
各変数は 0 0 以上 264 2^{64} 未満の整数値 (以下 符号無し 64 bit 整数 と表記) を保持することが出来る。
プログラムの実行開始時点で、A A には整数 a a が、B B には整数 b b が、それ以外の変数には 0 0 が代入されている。
プログラムの実行終了時点で変数 C C a × b mod1000000007 a\ \times\ b\ \bmod{1000000007} が保持されている必要がある。

プログラムの形式

プログラムの 1 1 行目にはプログラムの命令数を表す整数 N N (1  N  100) (1\ \leq\ N\ \leq\ 100) が書かれる。
プログラムの 2 2 行目から N + 1 N\ +\ 1 行目には N N 個の命令が書かれる。命令は上から下に順次実行される。
命令は次の 3 つのいずれかである。

  • add x y z
    • x x (y + z) mod264 (y\ +\ z)\ \bmod{2^{64}} を代入する。ここでは x x は変数、y, z y,\ z は変数または符号無し 64 bit 整数である。
  • mul x y z
    • x x y × z mod264 y\ \times\ z\ \bmod{2^{64}} を代入する。ここでは x x は変数、y, z y,\ z は変数または符号無し 64 bit 整数である。
  • rem x y
    • x x y mod998244353 y\ \bmod{998244353} を代入する。ここでは x x は変数、y y は変数または符号無し 64 bit 整数である。

ジャッジ

提出されたプログラムの形式が誤っていた場合、ジャッジの判定は不定である。
提出されたプログラムの形式が正しい場合、ジャッジは 1 1 ケース毎に 104 10^4 個の整数の組 (a, b) (a,\ b) (0  a, b  1000000006) (0\ \leq\ a,\ b\ \leq\ 1000000006) に対してプログラムを独立に実行する。(整数の組はジャッジ側があらかじめ用意したものであり、テストケース毎に固定である。)
全ての (a, b) (a,\ b) の組に対して実行終了時に変数 C C a × b mod1000000007 a\ \times\ b\ \bmod{1000000007} が保持されている場合、ジャッジの判定は AC となる。そうでない場合は WA となる。

Sample Explanation 1

正しい形式で書かれたプログラムの例を示します。(このプログラムは仕様を満たしていないため、提出しても WA となります。) このプログラムの実行終了時点で各変数に代入されている値は次の通りです。 - A A : a + 10 a\ +\ 10 - B B : b b - C C : a × b mod998244353 a\ \times\ b\ \bmod{998244353} - D D : b + 2 b\ +\ 2 - E E : 1 1 - それ以外の変数 : 0 0