A. Modulo Ruins the Legend 2022 ICPC-杭州

news/2024/7/5 5:01:59

思路:

(1)题目抽象为求(ns+n*(n+1)/2*d + sum)%m的最小值

(2)由裴属定理,ns+n*(n+1)/2*d = k1*g1(n,n*(n+1)/2);

 (3)所以为求(k1g1 + sum)%m = ans的最小值;

(4)即k1g1 +k2m = ans - sum;

(5)又k1g1 + k2m = k3g2(g1,m);

(6)即求k3g2 + sum = ans,中ans最小值,即sum%g2的最小值,直接取正模即可,这样我们就拿到了ans,再由拓展欧几里得求出k1,再拓展一次求出s,d即可,这时候值可能为负,由于全局对m取模,所以对s,d取正模即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

typedef long long LL;

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

LL gcd(LL a,LL b)
{
    return b? gcd(b,a%b) : a;
}
LL MOD(LL a,LL b)
{
    return (a%b + b)%b;
}

int main()
{
    LL n, m;
    cin >> n >> m;
    LL sum = 0;
    for (int i = 0; i < n; i++)
    {
        LL x;
        cin >> x;
        sum += x;
    }
	
	LL ans,k1,k2,S,D;
	LL g1 = gcd(n,n*(n + 1)/2);
	LL g2 = gcd(g1,m);
	ans = MOD(sum,g2);
	
	g2 = exgcd(g1,m,k1,k2);
	k1 *= ( (ans - sum)/g2 ) % m;
	k1 %= m;
	g1 = exgcd(n,n*(n + 1)/2,S,D);
	S*= k1,D*= k1;
    
    S = MOD(S,m),D = MOD(D,m);
    cout << ans << endl;
    cout << S <<" "<<D;
    
    return 0;
}


http://lihuaxi.xjx100.cn/news/1710075.html

相关文章

ALPHA开发板网络方案说明

一. 简介 正点原子 ALPHA开发板&#xff0c;包括我们移植的 Uboot&#xff0c;都是参考了 NXP&#xff08;恩智浦&#xff09;官方的开发板的。 I.MX6UL/ULL 内部有个以太网 MAC 外设&#xff0c;也就是 ENET &#xff0c;需要外接一个 PHY 芯片来实现网络通信功能&#…

QWidget快速美化-圆形蓝色单选框

将代码复制进QRadioButton的样式表 效果: 代码: QRadioButton{font:75 9pt "Arial";background:transparent;color:white;border:none; }QRadioButton:disabled{color:gray; }QRadioButton::indicator{width:12px;height:12px;border-radius:8px; }QRadioButton::i…

爱创科技携手洽洽食品,探索渠道数字化最优解!

坚果的下半场&#xff0c;是从吃到喝。 消费升级大潮下&#xff0c;健康养生理念逐渐深入人心。以“天然健康”为核心的食品新消费潮流正加速形成&#xff0c;一个个打着“美味与营养”黄金设定的品类风口正被不断创建&#xff0c;其中人气有增无减的当属植物基饮品。据相关报告…

使用Fragement(碎片)

一、Fragment简介 屏幕大小的差距可能会使同样的界面在不同设备上显示出不同的效果&#xff0c;为了能同时兼顾到手机和平板电脑的开发&#xff0c;从Android3.0版本开始提供了Fragment。 Fragment&#xff08;碎片&#xff09;是一种嵌入在Activity中的UI片段&#xff0c;它…

C++(boost):通过boost::process::child同步调用其他程序

boost提供了boost::process::child,可以通过其调用其他程序,并获得输出: #include <boost/process/child.hpp> #include <boost/process/io.hpp> #include <vector> #include <iostream> #include <string> #include <tuple>using nam…

leetcode:2347. 最好的扑克手牌(python3解法)

难度&#xff1a;简单 给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌&#xff0c;第 i 张牌大小为 ranks[i] &#xff0c;花色为 suits[i] 。 下述是从好到坏你可能持有的 手牌类型 &#xff1a; "Flush"&#xff1a;同花&#xff0c;五张相同花色的…

MTK6737安卓核心板-MT6737核心板_4G安卓模块

MT6737核心板以竞争力的价格提供出色的性能和功耗效率&#xff0c;降低了BOM、GMO和内存成本&#xff0c;符合以价值为导向的市场需求。该核心板是一种先进的解决方案&#xff0c;为终端用户提供了高品质又经济实惠的体验。它与全球范围内的IMS兼容&#xff0c;支持VoLTE、ViLT…

msvcr100.dll丢失怎样修复,msvcr100.dll丢失怎么解决(最新方法分享)

我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcr100.dll丢失”。这个错误通常会导致某些程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcr100.dll文件。本文将介绍五个有效的解决方法&#xff0c;帮助大家解决这一问题。 一…