首页 > 其他分享 >[TJOI2009] 猜数字

[TJOI2009] 猜数字

时间:2024-10-21 23:11:52浏览次数:1  
标签:__ ch 数字 equiv i128 TJOI2009 define mod

原题链接
\(首先我们来简单地复习一下中国剩余定理\)
\(对于x \equiv a_i \mod m_i\)
\(令M= \prod_{i=1}^{n} m_i(其中m_i代表的是除数,a_i代表的是余数)\)
\(M_i=M/m_i\)
\(t_i \equiv (M_i)^-1 \mod m_i(使用扩展欧几里得算出即可 exgcd)\)
\(因为(t_i*M_i) \equiv 1 \mod m_i 并且 a_i*t_i*M_i \mod m_i==1 (意思为自己对它取模的结果为一) a_i*t_i*M_i \mod M_i==0 (代表其它数对他进行取模结果都为零)\)
\(那么很明显符合上式\)
\(所以x=k\prod_{i=1}^{n} m_i+\sum_{i=1}^{n} (t_i*a_i*M_i)\)
\(x \equiv \sum_{i=1}^{n} (t_i*a_i*M-) \mod k\prod_{i=1}^{n} m_i\)
\(经过一系列小学生计算 我们发现这题就是中国剩余定理的板子题 那么直接套板子即可通过 因为数据点可能过大 >2e18 所以建议使用__int128__\)
\(code:\)

点击查看代码
plaintext
#include<bits/stdc++.h>

#define int long long
using namespace std;
#define pb push_back
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
#define i128 __int128
i128 read() {
    __int128 x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}

std::ostream &operator<<(std::ostream &os,i128 n){
    std::string s;
    while(n){
        s+='0'+n%10;
        n/=10;
    }
    std::reverse(s.begin(),s.end());
    return os<<s;
}
i128 qpw(i128 a,i128 b,i128 mod){i128 ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
void exgcd(i128 a,i128 b,i128 &x,i128 &y){
    if(b==0){x=1;y=0;return;}
    exgcd(b,a%b,x,y);
    i128 tp=x;
    x=y;y=tp-a/b*y;
}
void print(__int128 x) {
    if (x < 0) {
        putchar('-');
        x = -x;
    }
    if (x > 9) print(x / 10);
    putchar(x % 10 + '0');
}

void solve() {
    i128 n;n=read();
    i128 lcm=1,x,y;
    vector<i128>a(n+1),b(n+1);
    for(int i=1;i<=n;i++)a[i]=read();
    for(int i=1;i<=n;i++)b[i]=read(),lcm=lcm*b[i];
    for(int i=1;i<=n;i++)a[i]=(a[i]%b[i]+b[i])%b[i];
    i128 ans=0;
    for(int i=1;i<=n;i++){
        i128 tp=lcm/b[i];
        exgcd(tp,b[i],x,y);
        x=(x%b[i]+b[i])%b[i];
        ans=(ans+x*tp%lcm*a[i]%lcm)%lcm;
    }
    print(ans);
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int _=1;
//    cin>>_;
    while(_--)solve();
}

标签:__,ch,数字,equiv,i128,TJOI2009,define,mod
From: https://www.cnblogs.com/archer233/p/18491585

相关文章

  • 分支与循环:猜数字游戏的代码实现
    在我们学习分支和循环之后我们可以简单的写一个小游戏了——猜数字思维构想    一、预期效果         实现随机生成0~100之间的数字,玩家进行猜测,按结果进行判断。对于结果实现如果玩家猜大了给予玩家“猜大了”的提示;如果猜小了,给予玩家“猜小了”的提示;若......
  • 【热门主题】000007 网络安全:守护数字世界的坚固防线
    前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 使用 Swift 识别英文数字验证码
    环境准备在开始之前,请确保你的项目中已经集成了以下库:Alamofire(用于网络请求)TesseractOCRiOS(用于OCR识别)可以通过CocoaPods安装这些库,首先在你的Podfile中添加:rubypod'Alamofire','~>5.4'pod'TesseractOCRiOS','~>4.0.0'然后运行podinstall。下载验证码......
  • 使用 Ruby 识别英文数字验证码
    环境准备在开始之前,确保安装以下gem:bashgeminstallrmagickhttpartytesseract-ocr你还需要确保已经安装了TesseractOCR引擎,并配置好其路径。下载验证码图片使用HTTParty下载验证码图片并保存到本地:rubyrequire'httparty'classCaptchaDownloaderdefself.......
  • 使用 C# 识别英文数字验证码
    环境准备在开始之前,请确保你的项目中引用了以下NuGet包:TesseractRestSharp在VisualStudio中,你可以通过NuGet包管理器安装它们:bashInstall-PackageTesseractInstall-PackageRestSharp确保你已安装TesseractOCR引擎,并将其路径配置在系统环境变量中。下载验......
  • 支持国密算法的数字证书-国密SSL证书详解
    在互联网中,数字证书作为标志通讯各方身份信息的数字认证而存在,常见的数字证书大都采用国际算法,比如RSA算法、ECC算法、SHA2算法等。随着我国加强网络安全技术自主可控的大趋势,也出现了支持国密算法的数字证书-国密SSL证书。那么什么是国密SSL证书?国密SSL证书支持哪种国密算法呢......
  • 在小红书上用AI数字人做心理学赛道,15天涨1.6万粉
    家人们!说实话,用AI数字人带货确实是对于普通人变现最快的项目,但对于AI数字人玩法,许多小伙伴还只是停留在单纯做视频带货的认知层面。但对于高阶玩家,早于将AI数字人si域变现,玩得如火纯青了。si域高客单转化,才是真正的变现无上限,且复购率强。最典型案例就是通过数字人,引流si......
  • 无锡哲讯携手SAP思爱普,引领企业实现数字化转型
     在数字化时代,企业如同航行在浩瀚大海中的船只,需要先进的导航系统来指引方向。SAP思爱普,作为全球领先的企业资源规划解决方案提供商,正扮演着这样的角色。  数字化转型的挑战与机遇 随着云计算、大数据、物联网等技术的飞速发展,数字化转型已成为企业提升竞争力的关键。SAP......
  • C语言练习之猜数字游戏
    一游戏规则:1.在电脑上生成1-100的随机数2.玩家可以输入所猜数字,电脑根据输入数字做出猜大、猜小、猜对的反馈二游戏的实现:1.随机数的生成:1.1rand C语言的库函数提供了一个rand函数,它的头文件是stdlib.h,rand函数可以根据一个种子随机生成0-RAND_MAX(最少是32767)......
  • 2024年数字化转型与管理国际学术会议(DTM 2024) 2024 International Conference on Digi
    文章目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus大会时间:2024年11月22-24日三、大会介绍2024年数字化转型与管理国际学术会......