您的位置:首页 > 其它

An easy problem

2015-09-26 20:23 459 查看

An easy problem

Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 216 Accepted Submission(s): 111



[align=left]Problem Description[/align]
One day, a useless calculator was being built by Kuros. Let's assume that number X is showed on the screen of calculator. At first, X = 1. This calculator only supports two types of operation.

1. multiply X with a number.

2. divide X with a number which was multiplied before.

After each operation, please output the number X modulo M.

[align=left]Input[/align]
The first line is an integer T(1≤T≤10),
indicating the number of test cases.

For each test case, the first line are two integers Q and M. Q is the number of operations and M is described above. (1≤Q≤105,1≤M≤109)

The next Q lines, each line starts with an integer x indicating the type of operation.

if x is 1, an integer y is given, indicating the number to multiply. (0<y≤109)

if x is 2, an integer n is given. The calculator will divide the number which is multiplied in the nth operation. (the nth operation must be a type 1 operation.)

It's guaranteed that in type 2 operation, there won't be two same n.

[align=left]Output[/align]
For each test case, the first line, please output "Case #x:" and x is the id of the test cases starting from 1.

Then Q lines follow, each line please output an answer showed by the calculator.

[align=left]Sample Input[/align]

1
10 1000000000
1 2
2 1
1 2
1 10
2 3
2 4
1 6
1 7
1 12
2 7


[align=left]Sample Output[/align]

Case #1:
2
1
2
20
10
1
6
42
504
84
#include <iostream>
#include<stdio.h>
#include<malloc.h>
#include<string.h>
using namespace std;
long long y[111111];
long long x[111111];
long long mod;
bool vis[111111];
void cal(int st,int id)
{
for(int i=st;i<=id;i++)
{
x[i]=x[i-1];
if(vis[i]) continue;
x[i]=(x[i-1]*y[i])%mod;
}
}
int main()
{
int t,q,opr;
scanf("%d",&t);
for(int z=1;z<=t;z++)
{
memset(vis,0,sizeof(vis));
scanf("%d %I64d",&q,&mod);
x[0]=1;
printf("Case #%d:\n",z);
for(int i=1;i<=q;i++)
{
scanf("%d %I64d",&opr,&y[i]);
if(opr==1)
{
x[i]=(x[i-1]*y[i])%mod;
printf("%I64d\n",x[i]);
}
else
{
vis[y[i]]=1;
vis[i]=1;
cal(y[i],i);
printf("%I64d\n",x[i]);
}
}
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: