In the distant space, there is a technologically advanced planet.
One day they provided the Earth with a code that could achieve the ultimate meaning of the universe. People were very happy, but found that this code can only run on computers with a word length of 47 bits. As a good computer scientist, you need to implement a tool to simulate running this code on our computer.
This tool needs to simulate the following instructions:
“def x n” : define a unsigned 47 bits integer variable named x, with initial value n, n is an integer in [0, 2^47-1]
“add x y” : means x = x + y
“sub x y” : means x = x - y
“mul x y” : means x = x * y
“div x y” : means x = x / y, we guarantee y is not zero
“mod x y” : means x = x % y, we guarantee y is not zero
When the result of addition and multiplication cannot be represented by 47 bits, the part above 47 bits is truncated.
When the result of subtraction is less than zero, the result should add 2^47.
The name of each variable only contains letters and the length does not greater than 20.
Input
Contains multiple lines of input, one instruction per line.
Output
For each instruction, output the value of the first argument after calculation. For example, “def abc 100”, then your output will be “abc = 100” in a line with no quotation marks.
See Sample Output for more information.
Sample Input
def six 6
def abc 1
def bcd 0
sub bcd abc
add abc six
def universe 0
mul abc six
add universe abc
div bcd six
mod bcd abc
Sample Output
six = 6
abc = 1
bcd = 0
bcd = 140737488355327
abc = 7
universe = 0
abc = 42
universe = 42
bcd = 23456248059221
bcd = 5
题目不难,但有坑点。。。。
(交了10发。。。都没过。。。
编译器也有一点问题。。(不说了。。
注意使用 unsigned long long 储存,
但是遇到减法时候,要先加 Mod, 因为 可能会由于减法变成负数。。。。
注意这一点应该就没有什么问题了
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;
using namespace std;
typedef unsigned long long int ull;
#define maxn 2000005
#define inf 0x3f3f3f3f
const long long int mod = 1e9 + 7;
ll read() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch>'9') {
if (ch == '-') {
f = -1;
}
ch = getchar();
}
while (ch >= '0'&&ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
ll quickpow(ll a, ll b) {
ll ans = 1;
while (b > 0) {
if (b % 2)ans = ans * a;
b = b / 2;
a = a * a;
}
return ans;
}
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}
bool cmp(int a, int b) {
return a > b;
}
ll ves[maxn];
void revs() {
for (ll i = 1; i <= 1000000; i++) {
ves[i] = quickpow(i, mod - 2);
}
}
map<string, ull>mp;
//ull Mod = quickpow(2ull, 47ull);
int main() {
ios::sync_with_stdio(false);
string con;
ull Mod = 1;
for (int i = 1; i <= 47; i++)Mod = Mod * 2;
//cout << Mod << endl;
while (cin >> con) {
if (con == "def") {
string de;
ull x;
cin >> de >> x;
// x = x % Mod;
mp[de] = x;
cout << de << ' ' << '=' << ' ' << x << endl;
continue;
}
else if (con == "add") {
string m, n;
cin >> m >> n;
// mp[m] = (mp[n] % Mod + mp[m] % Mod + Mod) % Mod;
mp[m] += mp[n];
mp[m] %= Mod;
cout << m << ' ' << '=' << ' ' << mp[m] << endl;
}
else if (con == "sub") {
string m, n;
cin >> m >> n;
mp[m] += Mod - mp[n];
if (mp[m] >= Mod) {
mp[m] -= Mod;
}
cout << m << ' ' << '=' << ' ' << mp[m] << endl;
}
else if (con == "mul") {
string m, n;
cin >> m >> n;
mp[m] = ((mp[m]) * (mp[n]));
mp[m] = mp[m] % Mod;
cout << m << ' ' << '=' << ' ' << mp[m] << endl;
}
else if (con == "div") {
string m, n;
cin >> m >> n;
mp[m] /= mp[n];
cout << m << ' ' << '=' << ' ' << mp[m] << endl;
}
else if (con == "mod") {
string m, n;
cin >> m >> n;
mp[m] = mp[m] % mp[n];
cout << m << ' ' << '=' << ' ' << mp[m] << endl;
}
}
}