Description
Mathews uses a brand new 16-bit instruction processor. (Yeah i am being sarcastic!). It has one register (say R) and it supports two instructions:
- ADD X; Impact: R = (R + X) mod 65536
- MUL X; Impact: R = (R * X) mod 65536
- [For both instructions 0 <= X <= 65535]
Input Format:
The input file consists of multiple testcases.
The first line of each testcase contains one integer, N. (1 <= N <= 100,000).
The following N lines contain one instructions each.
Input terminates with a line containing N=0, which must not be processed.
Output Format:
For each testcase print one integer in a single line, denoting the number of different values the register can take after code execution.
Sample Input:
1 ADD 3 1 MUL 0 5 MUL 3 ADD 4 MUL 5 ADD 3 MUL 2 8 ADD 32 MUL 5312 ADD 7 MUL 7 ADD 32 MUL 5312 ADD 7 MUL 7 0Sample Output:
65536 1 32768 16
看第一眼题的时候觉得这题肯定不难,于是果断开题,结果读题愣是读了20分钟,还没有看懂题意~(默默表示被百度翻译坑了一发)
后来冷静想了一下,发现ADD操作可以直接忽略,只需要把MUL的数因数分解就可以了。
当然,这题数据貌似卡的不严,暴力打表也可以做出来。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n) && n)
{
int temp;
char op[10];
int cnt = 65536;
bool flag = true;
for(int i=0; i<n; i++)
{
scanf("%s %d",op,&temp);
if(op == "MUL")
{
if(temp == 0)
{
flag = false;
break;
}
while(temp % 2 == 0)
{
cnt >>= 1;
temp /= 2;
}
}
}
if(!flag || !cnt)
printf("1\n");
else
printf("%d\n",cnt);
}
}