首页 > 其他分享 >2022ICPC杭州站 A (裴蜀 + 扩欧)

2022ICPC杭州站 A (裴蜀 + 扩欧)

时间:2023-07-13 16:26:16浏览次数:40  
标签:int sum exgcd 扩欧 2022ICPC 序列 裴蜀 define

题目链接:A

题意:

给定一个序列 \(a\),让序列加上一个等差序列,求出总和 %$ m$ 的最小值以及等差序列的 \(s\) 和公差 \(d\)。

思路:

定义 \(a\) 序列总和为sum。
则求解的答案为 \((sum+n∗s+n∗(n+1)2∗d)\) %m 的最小值。
根据裴蜀定理得到原式等于 \(sum+x∗gcd(n,n∗(n+1)/2) + y * m\)
再裴蜀,\(sum + k∗g + y * m\)。
求该值的最小,这个值大于 0,所以最小应该是等于 \(m\),得到 \(k=⌈sum−mg⌉\)。

AC代码:

// -----------------
#include <iostream>
#include <cstring>
#include <algorithm>
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
#define endl '\n'
#define rep(i,x,y) for(int i = (x); i <= (y); i ++)
#define dec(i,y,x) for(int i = (y); i >= (x); i --)
#define int long long 
using namespace std;

const int N = 1e5 + 7;
int a[N];
int n,m;

int exgcd(int a, int b, int &x, int &y) 
{
    if (!b)
    {
        x = 1; y = 0;
        return a;
    }
    int d = exgcd(b, a % b, y, x);
    y -= (a / b) * x;
    return d;
}

void solve()
{
    cin >> n >> m;
    int sum = 0;
    rep(i,1,n) cin >> a[i],sum += a[i];
    sum %= m;
    int x,y,s,d;
    int g = exgcd(exgcd(n, (n+1)*n/2, s, d), m, x, y);  // 两次扩欧
    int k = (m - sum + g - 1) / g;  // 求 k
    cout << k * g + sum - m << endl;
    x = x * k % m;  // 乘当前倍数则为 x 的实际值
    s = s * x % m;  // 再后推需乘当前系数更新实际值
    d = d * x % m;
    cout << (s + m) % m << " " << (d + m) % m << endl;  // 保证答案非负
}

signed main()
{
    IOS 
    int T = 1;
    //cin >> T;
    while(T --) { solve(); }
    return 0;
}

标签:int,sum,exgcd,扩欧,2022ICPC,序列,裴蜀,define
From: https://www.cnblogs.com/liqs2526/p/17551219.html

相关文章

  • 多元一次方程的解(扩欧 + 构造)
    例题:SGU140题意:给出一个长度为n的非负整数序列A和两个数P,B,要求找出同样的非负整数序列X满足:\(A_1*X_1+A_2*X_2+...+A_n*X_n=B(modP)\)思路:看起来是一个多元一次方程,我们只需要找到一个合法的非负整数序列作为解即可,所以我们可以构造答案。我们可以求出......
  • 数论-裴蜀定理-扩展欧几里得算法
    裴蜀定理对于任意的整数a、b,都存在一对整数x、y(注意x和y可以是负整数),使得\(ax+by=gcd(a,b)\)成立。或者可以这样描述:对方程\(ax+by=c,(a,b,c∈Z)\),只有满足\(gcd(a,b)|c\)(即a和b的最大公约数可以整除c),方程才有整数解。扩展欧几里得算法的证明已知\(gcd(a,b)=gcd(b,a\%b)\)......
  • 浅谈裴蜀定理
    前置知识扩展欧几里得问题给定$a,b,$设$s=ax+by$,求当$s>$0时,求s的最小值定理$\min(s)=\gcd(a,b)$证明见扩展欧几里得引理给定n个数,分别为$A_1$,$A_2$,$A_3$...$A_n$任取n个数,分别为$X_1$,$X_2$,$X_3$...$X_n$设$s=\sum_{i=1}^NA_i*X_i$使$s>0且使s$......
  • 2022icpc ec-final 游了记
    目录3.23day-13.24day03.25day13.26day23.27day3承上NOI2021退役记(密码123456):https://www.cnblogs.com/gmh77/p/15079696.html老年人的大学生活3.23day-1下午鸽......
  • 裴蜀定理与扩展欧几里得
    裴蜀定理与扩展欧几里得裴蜀定理定理对于任意整数\(a,b\),设\(d=\gcd(a,b)\),则方程\(ax+by=d(s\in\mathbb{Z})\)必定有无数组整数解\((x,y)\)。且对于\(d\)的任意整数......
  • 扩欧学习笔记
    扩欧这玩意儿暑假就学了,但是一直仅限于背\(y=\cdots\),背完就忘,于是搞个学习笔记加深印象。解方程\(ax+by=\gcd(a,b)\)设\(ax_1+by_1=\gcd(a,b)\),\(bx_2+(a\modb)y_2=......
  • 2022icpc 南京
    G.Inscryption贪心回溯在题目中0可以变成策略1,也可以变成策略2,但策略2是比策略1更加优秀的策略,所以当遇到0时能变成策略2就变成策略2,但是变成策略2可能会让后面的决策......
  • 裴蜀定理_原理证明
    裴蜀定理算法使用对于\(\foralla,b\in\mathbb{Z}\),\(\existsx,y\in\mathbb{Z}\),使\[a\cdotx+b\cdoty=\gcd(a,b)\]且\(a\)与\(b\)组成的最小正整数为\(......
  • 2022icpc杭州铜牌题题解
    A.ModuloRuinstheLegend\[求s、d,使\suma_i+sn+d\frac{n(n+1)}{2}\(\bmodm)最小\\设sum=\suma_i\(\bmodm),t=gcd(n,\frac{n(n+1)}{2})\\原式=sum+kt\(\bm......
  • 2022icpc杭州(The 2022 ICPC Asia Hangzhou Regional Programming Contest)
    链接:https://codeforces.com/gym/104090A.ModuloRuinstheLegend#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;i64exgcd(i64a,i64b,......