原题链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5475
题目大意:
Q个询问,结果取模M。
x==1,累乘。
x==2,除以第n个数。
技巧:
把除以第n个数看成不乘第n个数。
即可不影响取余结果。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=1e5+10;
int que[MAXN];
bool flog[MAXN];//标记哪些数不用乘
int main()
{
int T;
long long ans;
scanf("%d",&T);
for(int k=1;k<=T;k++)
{
int Q,M,x;
memset(flog,0,sizeof(flog));
scanf("%d%d",&Q,&M);
printf("Case #%d:\n",k);
ans=1;
for(int i=1;i<=Q;i++)
{
scanf("%d%d",&x,&que[i]);
if(x==2)
{
ans=1;
flog[que[i]]=true;
flog[i]=true;
for(int j=1;j<=i;j++)
{
if(!flog[j])
ans=(ans*que[j])%M;
}
}
else ans=(ans*que[i])%M;
cout<<ans<<endl;
}
}
return 0;
}