题目
看了题解以后,才发现题意理解错了。而且通过这道题目,明白了一个新的知识点。以前看别人的题解,一直不懂。
在C/C++中, +, -的优先级低于/,
∗
*
∗, %。而 /,
∗
*
∗, %优先级一样,所以从左到右进行运算。
加法或减法
( a ± b ) % c = ( ( a % c ) + ( b % c ) ) % c (a\pm b)\%c = ((a\%c)+(b\%c))\%c (a±b)%c=((a%c)+(b%c))%c
乘法
( a ∗ b ) % c = ( a % c ) ∗ ( b % c ) % c (a*b)\%c=(a\%c)*(b\%c)\%c (a∗b)%c=(a%c)∗(b%c)%c
除法
除法用到“逆元”的思想,回头认真地学习逆元
(
a
/
b
)
%
m
o
d
=
(
a
b
m
o
d
−
2
)
%
m
o
d
(a/b) \%mod=(ab^{mod-2})\%mod
(a/b)%mod=(abmod−2)%mod
#include <bits/stdc++.h>
using namespace std;
#define T int T; scanf("%d", &T); while(T--)
typedef long long ll;
const ll mod=4933;
ll binderPow(ll a, ll b){
ll ans=1;
while(b){
if(b&1)
ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans;
}
int main()
{
ll n, m, k, a, l, x, y, z;
ll ans=1;
scanf("%lld%lld%lld%lld%lld", &n, &m, &k, &a, &l);
for(int i=1; i<=k; i++){
scanf("%lld%lld%lld", &x, &y, &z);
if(!x)
continue;
ans=ans*(z-y)%mod*binderPow(z, mod-2)%mod;
}
ans=(ans+a)%mod;
printf("%lld\n", ans);
return 0;
}