首页 > 编程语言 >爬树的甲壳虫(扩展欧几里得算法)

爬树的甲壳虫(扩展欧几里得算法)

时间:2023-02-08 23:35:49浏览次数:40  
标签:return 甲壳虫 int 欧几里得 ans maxn 爬树 ll MOD

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
const int MOD = 998244353;
ll x[maxn], y[maxn];

//快速幂模板
ll ksm(ll a, ll b, ll m)
{
    ll ans = 1;
    while(b)
    {
        if(b & 1)ans = ans * a % m;
        b >>= 1;
        a = a * a % m;
    }
    return ans;
}
//求模MOD意义下的x的逆元
ll inv(ll x)
{
    return ksm(x, MOD - 2, MOD);
}
//扩展欧几里得模板
//求解cx+dy = gcd(c, d)的解,返回值为gcd(c, d)
ll extgcd(ll c, ll d, ll&x, ll&y)
{
    ll g = c;
    if(d)
    {
       g = extgcd(d, c % d, y, x);
       y -= (c / d) * x;
    }
    else x = 1, y = 0;
    return g;
}

int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> x[i] >> y[i];
    ll a = 0, b = 0;
    for(int i = n; i >= 1; i--)
    {
        ll p = x[i] * inv(y[i]) % MOD, p_1 = (y[i] - x[i]) * inv(y[i]) % MOD;
        a = (p + p_1 * a) % MOD;
        b = (1 + p_1 * b) % MOD;
    }
    //求解cx + dy = e
    ll c = a - 1, d = MOD, e = MOD - b, x, y;
    //先求解cx + dy = gcd(c, d)
    ll g = extgcd(c, d, x, y);
    //再求解cx + dy = e
    ll ans_x = x * e / g;
    cout<<(ans_x % MOD + MOD ) % MOD<<endl;
    return 0;
}

 

#include<bits/stdc++.h>
using namespace std;

const int MOD = 998244353;
const int maxn = 1e5 + 5;
typedef long long LL;
int x[maxn], y[maxn];

// 快速幂 a^n % P 
LL fpow(LL a, int n, int P){
    LL res = 1;
    while (n){
        if(n&1)
            res = res * a % P;
        a = (a * a) % P;
        n >>= 1;
    }
    return res;
}

int main(){
    int n;
    scanf("%d", &n);
    for (int i=1; i<=n; ++i){    
        scanf("%d%d", &x[i], &y[i]);
    }
    // 计算s(i)和ans = a_0,pre = s(i-1)
    int ans = 0, pre = 1;
    for (int i=1; i<=n; ++i){
        pre = 1LL * pre * y[n-i+1] % MOD 
        * fpow(y[n-i+1]-x[n-i+1], MOD-2, MOD) % MOD;  // y >= x
        ans = (1LL * ans + pre) % MOD;
    }
    printf("%d\n", ans);
    return 0;
} 

 

标签:return,甲壳虫,int,欧几里得,ans,maxn,爬树,ll,MOD
From: https://www.cnblogs.com/weinan030416/p/17103703.html

相关文章

  • POJ poj 2142 The Balance 扩展欧几里得 |x|+|y|最小
    TheBalanceTimeLimit: 5000MS MemoryLimit: 65536KTotalSubmissions: 8784 Accepted: 3817DescriptionMs.IyoKiffa-Australishasabalanceandonlytwokind......
  • 欧几里得算法及其扩展
    欧几里得算法及其扩展前言整除:对于整数\(a(a\ne0)\)和\(b\),如果\(\existsq\inZ\),使得\(b=a\timesq\),则称\(a\)能整除\(b\),记作\(a\midb\)。否则,称\(a\)......
  • 类欧几里得算法
    我还是觉得我学这玩意纯属闲着没事干。类欧几里得算法定义\[f(a,b,c,n)=\sum_{i=0}^n\left\lfloor\frac{ai+b}c\right\rfloor\]让你\(O(\logn)\)计算这个东西。首......
  • 扩展欧几里得(exgcd)
    这里先说一下最大公约数怎么求,辗转相除法都会用,这里讲一下站桩相除法的原理。例如两个数假设这两个数大小,设是这两个数的最大公约数。可得因为这里都是一个正整数不会对最......
  • Exgcd(扩展欧几里得算法)
    其实挺简单。GCD(辗转相除法)定理:\[\gcd(a,b)=\gcd(b,a\%b)\]证明:\[\text{设}a=kb+r\text{,则}r=a\bmodb\]\[\text{若}c\text{是}a,b\te......
  • 对质数取模结果(扩展欧几里得算法模板)爬树甲壳虫
    问题描述有一只甲壳虫想要爬上一颗高度为 �n的树,它一开始位于树根,高度为 00,当它尝试从高度 �−1i−1 爬到高度为 �i 的位置时有 ��Pi​ 的概率会掉回树根,求它从树根爬......
  • 扩展欧几里得算法 exgcd
    凌:前言\(\tt\#include~"\)\(\tt{\small\texttt{扩展欧几里得算法-}}OI~Wiki\)\(\tt"\)\(\tt\#include~"\)\(\tt{\small\texttt{关于}}~exgcd~{\small\texttt{求得......
  • 扩展欧几里得(exgcd(a,b))
    回顾       由贝祖定理可知:ax+by=gcd(a,b)       (a,y)为一组解      (x+kb,y-ka)也为解       所以有无数组解一、扩展欧几里得算法......
  • 类欧几里得算法学习笔记
    题目求\(f(a,b,c,n)=\sum\limits_{i=0}^n\lfloor\frac{ai+b}c\rfloor\)题解当\(a\gec\)或\(b\gec\)时,\(\begin{aligned}\sum\limits_{i=0}^n\lfloor\frac{ai+b......
  • 类欧几里得算法(部分)
    ##Preface欧几里得算法,就是辗转相除法。gcd(i,j)=gcd(j,i%j)##定义定义函数##推导一波显然当或者时,若当a,b均小于c怎么办?据大佬说转换成几何意义就是一条直线与x轴、y......