Ares, Toilet Ares
一道读题题+签到题,我希望下次不会出问题。因为经验问题wa了几发,我一定要吃一堑长一智。
题面:
思路:
写的花里胡哨,意思就是 a + ∑ ( z i − y i ) / z i a+\sum(z_i-y_i)/z_i a+∑(zi−yi)/zi。如果 x i x_i xi是0的时候不计入 s u m sum sum。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 114514;
const ll mod = 4933;
ll gcd(ll a, ll b)
{
if (b == 0)
return a;
if (a == 0)
return b;
if (a < b)
return gcd(b, a);
else
return gcd(b, a % b);
}
ll power(ll m, ll k)
{
ll res = 1 % mod, t = m;
while (k)
{
if (k & 1)
res = res * t % mod;
t = t * t % mod;
k >>= 1;
}
return res;
}
ll x, y, z;
int main()
{
ll n, m, k, a, l;
cin >> n >> m >> k >> a >> l;
ll ans = 1;
for (int i = 0; i < k; i++)
{
cin >> x >> y >> z;
if (!x)
continue;
ll son = ll(z - y);
ll mom = ll(z);
ll tmp = gcd(son, mom);
son /= tmp;
mom /= tmp;
ans = ans * son % mod * power(mom, mod - 2) % mod;
}
ans = (ans + a) % mod;
//cout << son << " " << mom << endl;
cout<<ans<<'\n';
}
注意点!!!
- 逆元最好每次都取掉,累计在一起再取容易出事故爆炸!!
- 分子分母约分时候要把__gcd单独拿出来,不然一个除过以后就改变了,下一个用__gcd约分就不准了。我是笨蛋。
下次这种题目要独立出!!
跑步去了,回来有空再补DF!!!
相信自己。