HDU3579 Hello Kiki【一元线性同余方程组】

2024-06-15 05:18

本文主要是介绍HDU3579 Hello Kiki【一元线性同余方程组】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3579


题目大意:

Kiki有X个硬币,她用不同的方式数了N次,每次她把硬币分成大小相等的组,记录每次一组硬币

的个数Mi和数完最后剩余的硬币数Ai。那么问题来了:总共有多少枚硬币?


思路:

典型的一元线性同余方程组X = Ai(mod Mi)求解。题目要求输出最小正整数解,则如果求得同余

方程组的解为0,那么答案就是所有Mi的最小公倍数。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define LL __int64LL GCD(LL a,LL b)
{if(b == 0)return a;return GCD(b,a%b);
}void ExGCD(LL a,LL b,LL &d, LL &x,LL &y)
{if( !b ){x = 1;y = 0;d = a;}else{ExGCD(b,a%b,d,y,x);y -= x * (a/b);}
}LL A[15],R[15];int main()
{LL a,b,c,d,x0,y0,lcm;int N,M,kase = 0;scanf("%d",&N);while(N--){lcm = 1;bool flag = 1;scanf("%d",&M);for(int i = 1; i <= M; ++i){scanf("%I64d",&A[i]);lcm = lcm / GCD(A[i],lcm) * A[i];}for(int i = 1; i <= M; ++i)scanf("%I64d",&R[i]);printf("Case %d: ",++kase);for(int i = 2; i <= M; ++i){a = A[1];b = A[i];c = R[i] - R[1];ExGCD(a,b,d,x0,y0);if( c%d != 0 ){flag = 0;break;}LL temp = b/d;x0 = (x0*(c/d)%temp + temp) % temp;R[1] = A[1]*x0 + R[1];A[1] = A[1]*(A[i]/d);}if( !flag )printf("-1\n");else{if(R[1] != 0)printf("%I64d\n",R[1]);elseprintf("%I64d\n",lcm);}}return 0;
}



这篇关于HDU3579 Hello Kiki【一元线性同余方程组】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062520

相关文章

线性回归(Linear Regression)原理详解及Python代码示例

一、线性回归原理详解         线性回归是一种基本的统计方法,用于预测因变量(目标变量)与一个或多个自变量(特征变量)之间的线性关系。线性回归模型通过拟合一条直线(在多变量情况下是一条超平面)来最小化预测值与真实值之间的误差。 1. 线性回归模型         对于单变量线性回归,模型的表达式为:         其中: y是目标变量。x是特征变量。β0是截距项(偏置)。β1

hello程序的漫游历程

hello程序的运行过程 #include<stdio.h>int main(){printf("hello, world\n);return 0;} 相信大家都知道这个著名的家伙,hello world,万物起源。 本文的目的就是一起来看看,当这个hello程序在系统上运行时,系统发生了什么以及为什么会这样。 hello程序的生命周期是从一个源文件(源程序)开始的,文件名为hello

DataWhale机器学习——第三章线性模型笔记

读书笔记: 《机器学习》第三章 线性模型 3.1 基本形式 3.1.1 线性模型的定义 3.1.2 线性模型的优点 简单易理解计算效率高容易实现和解释 3.1.3 线性模型的局限性 只能表达线性关系对于复杂的非线性关系,表现较差 3.2 线性回归 3.2.1 基本概念 3.2.2 最小二乘法 正规方程 3.2.3 正则化 为防止过拟合,可以在损失函数中加入正

AJAX:如何编写一个关于AJAX的Hello World?(ajax发送异步请求(四步操作))

用到的一个Servlet类: package cn.edu.web.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;impor

oracle学习之第一个存储过程:打印Hello World

数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数 存储过程:指的是存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值(存储函数可以,但是存储过程不行) --第一个存储过程:打印Hello World/*调用存储过程2种方式:1、exec sayhellow

在Mac OS上使用Visual Studio Code创建C++ Qt的Hello World应用

引言 Qt是一个跨平台的应用程序和用户界面框架,而Visual Studio Code是一个功能强大的编辑器,两者结合可以极大地提升开发效率。本文将指导你在Mac OS上使用Visual Studio Code创建一个简单的Qt 'Hello World'窗口应用。 环境准备 确保你的MacBook OS运行最新的操作系统。安装Homebrew,Mac OS的包管理器。通过Homebrew安装

高级线性回归模型详解

高级线性回归模型详解 在线性回归模型的基础上,有许多高级的技巧和方法可以进一步提高模型的性能和解释能力。本文将详细介绍多元线性回归、交互项、正则化方法(岭回归和套索回归)、多重共线性处理及模型诊断等高级主题。 目录 多元线性回归交互项正则化方法 岭回归套索回归 多重共线性处理模型诊断总结 多元线性回归 多元线性回归是线性回归的一种扩展形式,涉及多个自变量。其数学表达式为: Y = β

计数排序(第8章线性时间排序)

根据《算法导论》第八章算法实现下面函数,详见《算法导论》第八章计数排序,程序可运行: #include <STDLIB.H>#include <STDIO.H>#include <MALLOC.H>#include <STRING.H>/********************************************************* 函数名: void COUNTI

第六章线性模型选择+正则化

目录 什么是正则化(防止过拟合) 正则化的作用 正则化参数λ 第一题 第二题 回答 第三题 回答 第四题 回答 什么是正则化(防止过拟合) 正则化(Regularization)是指在机器学习和统计学中,通过引入额外的约束或惩罚项来防止模型过拟合的一种技术。过拟合是指模型在训练数据上表现很好,但在测试数据或新数据上表现较差的现象。正则化通过限制模型的复杂度,从而提高模型

SpringBoot (一) :入门篇 Hello World

什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 SpringBoot有什么