UVA 12169 Disgruntled Judge (扩展欧几里得算法)

【数论】Disgruntled Judge, NWERC 2008, UVa12169 #include #define mod 10001 using namespace std; typedef long long LL; LL n,p[210]; void exgcd(LL a,LL b,LL& d,LL& x,LL& y){ if(!b) d=a,x=1,y=0; else exgcd(b,a%b,d,y,x),y-=x*(a/b); } int main() 阅读详情

UVA 12169 Disgruntled Judge (扩展欧几里得算法)

给出3个整数x1,a,b。根据递推公式xi=(a*xi-1+b) mod 10001来构造了长度为2T的数列。给出x1,x3,x5…x2T-1,求出x2,x4,x6…x2T.

根据题意,有:
x2=(ax1+b)%mod - - - 111
x3=(a
x2+b)%mod - - - 222

令n=mod
由111得x2和ax1+b同余,所以x2-(ax1+b)=ny1 - - -333
由222得x3和ax2+b同余,所以x3-(ax2+b)=ny2 - - -444
. . . . .
方法一:
由444-333得,ny+(a+1)x2=ax1+x3
通过枚举a的值,通过扩展欧几里得算法求出x2的值,然后再根据222式
x3=(ax2+b)%mod == ax2+b=k*mod+x3
求出b的值。

方法二:
由444+a×333得,ny+(a+1)b=x3-a2x1
通过枚举a的值,通过扩展欧几里得算法求出b的值
. . . . .
最后用O(T)的时间来计算序列,每计算出一个新式就进行校验,发现与原输入不符,则继续枚举a。

值得注意的是,用扩展欧几里得算法求出的x是方程ny+(a+1)x2=gcd(n,a+1)的解,需要通过再一次的变换来得到原方程的解。

在求出原方程的解后,通过解的线性变换 X=k*(n/gcd(n,a+1))+x2来得到处在[0,10000]区间内的解。

进行线性变换的方法可以通过取模进行。
X=(x%mod+mod)%mod,求得X属于[0,10000]

对于X=kmod+x 求X属于[0,mod]
X=x%mod 等价于 x=k
mod+X 等价于 X=kmod+x
由于x可能为负数,固等式变成
X=(x%mod+mod)%mod

对于第一种方法后来求出的b也要在进行计算序列之前通过
b=(b%n+n)%n的操作,将其变换到[0,10000]的同余类。
根据取模的性质,有xi=(axi-1+b)%n=(axi%n+b%n)%n不然可能会溢出。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int max_n=1e4+5;
int n;
int input_x[max_n];
int output_x[max_n];
int mod=10001;
typedef long long ll;
void gcd(int a,int b,int &d,ll &x,ll &y)
{
	if(!b){
		d=a;x=1;y=0;
	}
	else {
		gcd(b,a%b,d,y,x);y-=x*(a/b);
	}
}
int main(void)
{
//	freopen("out.txt","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	scanf("%d",&input_x[i]);
	for(int a=0;a<=10000;a++)
	{
		ll y,x;
		ll b;
		int d;//d=gcd(mod,a+1) 
		ll c=input_x[2]-(ll)a*a*input_x[1];
		gcd(mod,a+1,d,y,b);
		if(c%d!=0)continue;
		b*=(c/d);
//		b=(b%mod+mod)%mod;
		bool flag=true;
		for(int i=1;i<=n;i++)
		{
			output_x[i]=(int)(((ll)a*input_x[i]+b)%mod);
			int temp=(int)(((ll)a*output_x[i]+b)%mod);
			if(i!=n&&temp!=input_x[i+1]){
				flag=false;break;
			}
		}
		if(!flag)continue;
		else{
			for(int i=1;i<=n;i++)
			printf("%d\n",output_x[i]);
			break;
		}
	}
// fclose(stdout);
 } 
//3
//17
//822
//3014
Python自动化办公:5分钟搞定钉钉群文件自动发送(附完整代码) 本文详细介绍了如何利用Python实现钉钉群文件的自动化发送。通过结合钉钉企业内部应用与群机器人API,构建了包含智能令牌管理、文件上传与消息发送的完整工作流。文章提供了可直接复用的完整代码,并分享了定时任务、目录监听等进阶实战方案,帮助职场人士高效解决重复性文件发送难题,实现办公自动化。 阅读详情

相关推荐

MTK Linux DRM分析(八)- KMS drm_crtc.c

CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。

iTom1900 1348

UVA - 12169 -扩展欧几里得算法

#include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> #define ll long long #define rep(i,j,k) for(int i=j;i<=k;++i) using namespace std; ...

qq_40921866的博客 171

OpenFOAM收敛问题排查指南:从参数设置到网格优化

本文系统性地介绍了OpenFOAM计算中收敛问题的排查方法。从理解收敛本质出发,详细讲解了如何通过调优求解控制参数(如松弛因子、离散格式)、合理设置时间步长与耦合算法,以及优化网格质量来解决发散难题。文章提供了从软件设置到硬件网格的完整排查路径,帮助用户实现稳定高效的计算流体力学模拟。

fern8的博客 790

UVA 12169 Disgruntled Judge (扩展欧几里得)

原题地址:here 题意:有333个整数x[1],a,bx[1],a,b x[1], a, b 满足递推式x[i]=(a∗x[i−1]+b)mod10001x[i]=(a∗x[i−1]+b)mod10001x[i]=(a*x[i-1]+b)mod 10001。由这个递推式计算出了长度为2T2T2T的数列,现在要求输入x[1],x[3],......x[2T−1]x[1],x[3],......x...

yiqzq的博客 389

深入解析Gerber RS274X文件格式:从基础语法到实战应用

本文深入解析PCB制造的核心标准Gerber RS274X文件格式,详细介绍了其基础语法、坐标系统、功能码以及嵌入式光圈定义等关键特性。通过实战案例演示了如何解析和手写Gerber指令,并总结了常见错误与调试技巧,帮助PCB工程师掌握这一与制造工厂沟通的“通用语言”,确保设计准确无误地转化为实体电路板。

weixin_29252171的博客 94

echarts实现3D地图——map3D

【代码】echarts实现3D地图——map3D。

xiaoququ的博客 7318

hpu 1194: Judge(快速幂)

Ocean每使用一次能力,就可以将一个物品的价值放大xx倍(原价值乘以xx)。 但是哪有这么好的事情? 物品的价值是有限度的,姑且认为物品的价值上界为MM。 如果经过放大后物品的价值大于或者等于MM,那么该物品价值将恒定以MM的值减少,直到小于MM为止。 比如价值为19,M=619,M=6:要减少33次MM,即19−6=13,13−6=7,7−6=16。19−6=13,13−6=7,7−6

qqchanmingdexiaji的博客 535

【DaVinci Configurator专题】-2-将CAN 2.0或CANFD Matrix的Arxml/DBC文件导入到CFG

共9页 目录 1 打开DaVinci Configurator,导入Arxml文件 2 解决导入Arxml文件后可能会出现的一些错误 3 验证CFG的配置 4 根据CFG的配置生成代码 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: Open the Input Files Assistant Complete update process Update ECU configurati

「汽车电子助手」的博客 6123

OJ网站程序员必备

一. Online Judge简介: Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++、Pascal)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Onl...

weixin_34209851的博客 930

27、超声成像技术与原理全面解析

本博客全面解析了超声成像技术与原理,涵盖声学材料特性、超声成像系统的基本概念与组成、关键技术如多普勒和聚焦技术、超声换能器的设计与原理、图像处理方法、系统校准与质量控制,以及超声成像的应用领域和发展趋势。旨在为医学诊断、工业检测和海洋声学等领域的研究人员和工程师提供深入的技术参考和指导。

z2a3b4c5d的博客 491

用 Docker 一键部署 SillyTavern酒馆 mac/windows/linux通用教程,我再也不手动折腾了!

本文介绍了如何使用 Docker 一键部署 SillyTavern 项目,适用于 Mac、Windows 和 Linux 系统。SillyTavern 是一个本地部署的大语言模型聊天界面,支持多种插件和扩展。文章详细说明了安装 Docker、拉取项目、启动容器、配置白名单、启用插件等步骤,并提供了常见问题的解决方法。通过 Docker 部署,用户可以避免繁琐的手动配置,快速搭建和运行 SillyTavern,适合希望简化部署流程的用户。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2620

经典算法和OJ网站(开发者必备)

一.Online Judge简介: Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++、Pascal)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被On...

凤凰涅槃 957

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

本文讲述英飞凌TC3xx的通用计时器GTM的架构。

无所适从的我的博客 4595

Disgruntled Judge UVA - 12169 不爽的裁判 扩展欧几里得算法

题目链接        有个裁判出的题太难,总是没人做,所以他很不爽。有一次他终于忍不住了,心想:“反正我的题没人做,我干嘛要费那么多心思出题?不如就输入一个随机数,输出一个随机数吧。”        于是他找了3个整数x1、a和b,然后按照递推公式xi=(axi-1+b) mod 10001计算出了一个长度为2T的数列,其中T是测试数据的组数。然后,他把T和x1, x3,…, x2T-1写到...

Nicolas的博客 667

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Uva 12169 Disgruntled Judge(扩展欧几里得算法)

题目大意:给出数列的通项公式xi=(axi-1+b)mod 10001,给出T个整数,是这个数列的奇数项,求偶数项。 题目链接:https://vjudge.net/problem/UVA-12169 题目思路:已知x1,则x2=(x1a+b)%10001,将这个式子代入x3, x3=(a*(x1a+b)+b)%10001,即x3+10001k=aax1+(a+1)b, 将已知项全部移到等式左边x...

一只谜谜怪的博客 203

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

UVa 12169 Disgruntled Judge(扩展欧几里得算法的应用)

12169 - Disgruntled Judge Time limit: 3.000 seconds        Once upon a time, there was an NWERC judge with a tendency to create slightly too hard problems. As a result, his problems were nev

锦瑟年华,逐梦之人 474

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

UVA - 12169 Disgruntled Judge

题意: 找3个整数x1,a,b;然后按照递推公式xi=(axi−1+b)mod10001xi=(axi−1+b)mod10001x_i=(a x_{i-1}+b )mod 10001计算出一个长度为2T的序列,其中T为测试数据的组数。然后把奇数项当做输入,偶数项当做输出。 /*UVa12169 - Disgruntled Judge --a,b都在10000以内,这样可以枚举a的值,然后根...

Bryce1010's Blog 650

Disgruntled Judge UVA - 12169

Disgruntled Judge UVA - 12169 题意:给定2*T大小的数组,给定奇数项,符合关系x[i] = (a · x[i−1] + b) mod 10001.求各个偶数项。 题解:范围10000,可以通过暴力求解过,但是时间复杂度太高,根据公式可以采用拓展欧几里得求解。    可以得到 x2 = (a * x1 + b) % 10001; x3 = (a

sortmin的博客 214

Uva12169-Disgruntled Judge

题目链接 Uva-12169-Disgruntled Judge 题意 给出一个序列的一半,x1,x3,x5,x7,…x(2*t-1),序列的长度为2 * t。这个序列是通过x[i] = (x[i-1] * a + b) % mod (mod == 10001) 生成的。要求让你输出x2,x4,x6….,x(2 * t) 其中t 题解 根据紫书的思路 由于a,b都是

Uniontake 598

UVa 12169 Disgruntled Judge

exgcd

我要吃熊猫 464

【UVA】12169-Disgruntled Judge(暴力or欧几里得)

可能由于后台数据的原因,这道题直接暴力枚举a,b进行判断也能过,不过跑的时间长,效率太差了。 14021006 12169 Disgruntled Judge Accepted C++ 0.876 2014-08-11 08:46:28 不说了,比较无脑。 #include #include #include #incl

花月阁 3943

Disgruntled Judge UVA - 12169(扩展欧几里德+暴力)

题目链接: https://vjudge.net/problem/UVA-12169 题意: 有3个整数 x[i], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001。由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T-1], 输出x[2],x[4]......x[2T]. T&lt;=100,0&lt;=x&lt;=10000...

ltrbless的博客 269

UVA 12169 Disgruntled Judge

思路:枚举 a ,通过扩展欧几里得算法利用数列前两个值求 b ,排除非整数解的情况,判断该组 a,b 是否满足剩余序列,(注意必须判断整个序列,不能只判断前几个值,时间够用)。 关于数据范围的第一个问题:b 的范围是 [0,10000] 。由通解公式可知b’=b+10001*t(t 为任意整数),只要通解中的一个解满足序列递推公式,则剩余解都满足。可以简单对其模10001(如第21行,...

145

【NWERC2008】uva12169 Disgruntled Judge

枚举+扩展欧几里得

YHaX的博客 593

UVA 12169 - Disgruntled Judge(扩展欧几里得,等式求解)

这个题在求a,b的时候。 需要两个等式。 写出 x3 x2 的关系式  和 x

Shimmer_的专栏 838

UVa12169 Disgruntled Judge

x2 = (a * x1 + b) % 10001;x3= (a * x2 + b) % 10001; ∴x3 = (a * (a * x1 + b) % 10001 + b ) % 10001; ∴(a + 1) * b + 10001 * (-k) =x3 - a * a * x1 由于a的范围是1~10000,所以可以枚举a,解出b,暴力判断这组a和b能否适...

dezhen7015的博客 141
上一篇: UVA 11582 Colossal Fibonacci Numbers(数论)
下一篇: UVA 12716 GCD XOR(数论)
WedsonLin
博客等级 码龄7年 1粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值