题目大意:有3个整数 x[1], 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<=100,0<=x<=10000. 如果有多种可能的输出,任意输出一个结果即可。

由于a和b都小于等于10000,直接枚举a和b暴力可以过。但是有没有更快的方法呢?

首先令递推式的i=2,那么x[2]=(a*x[1]+b)mod 10001;再令i=3,得x[3]=(a*x[2]+b)mod 10001,可以得出x[3]=(a*(a*x[1]+b)+b)mod 10001。这时候只有a和b是变量,我们枚举a,就可以求出b了。(a+1)*b mod 10001 = ( (x[3]-a*a*x[1]) mod 10001 + 10001 ) mod 10001.(这里的x[3]-a*a*x[1]可能为负,代码中可以先不取模,后面计算b的时候一起取模即可) 所以简化成(a+1)*b mod 10001 = (x[3]-a*a*x[1]) mod 10001。这里就变成了同模方程,扩展欧几里得即可解答。

暴力代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn=+;
const int mod=;
int in[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
for(int i=; i<t; i++)
scanf("%d",in+i);
bool flag;
for(int a=; a<=; a++)
{
for(int b=; b<=; b++)
{
flag=false;
for(int i=; i<t; i++)
if(in[i]!=((a*(a*in[i-]%mod+b)+b)%mod))
{
flag=true;
break;
}
if(!flag)
{
for(int i=; i<t; i++)
printf("%d\n",(a*in[i]+b)%mod);
break;
}
}
if(!flag)
break;
}
return ;
}

扩展欧几里得:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn=+;
const int mod=;
int in[maxn];
typedef long long ll; ll exgcd(ll a, ll b, ll&x, ll&y)
{
if (b == )
{
x = ;
y = ;
return a;
}
ll r = exgcd(b, a%b, y, x);
ll t = x;
y = y - a/b*t;
return r;
}
int main()
{
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
for(int i=; i<t; i++)
scanf("%d",in+i);
bool flag;
for(ll a=; a<=; a++)
{
ll x,y; //定义long long 型是保证没有取模的式子不会超内存
ll g=exgcd(a+,mod,x,y);
ll tmp=in[]-a*a*in[]; //这里可以先不取模,后面计算b的时候取模
if(tmp%g==)
{
flag=false;
ll b=(x*tmp/g)%mod; //这里最好取下模,虽然后面计算in[i]的时候也会取模,但是算出来的in[i]可能因为b负太多而变成负数
for(int i=;i<t;i++)
{
if(in[i]!=(a*(a*in[i-]+b)+b)%mod)
{
flag=true;
break;
}
}
if(!flag)
{
for(int i=;i<t;i++)
printf("%d\n",(a*in[i]+b)%mod);
break;
}
} }
return ;
}

UVA 12169 Disgruntled Judge 枚举+扩展欧几里得的更多相关文章

  1. UVA 12169 Disgruntled Judge【扩展欧几里德】

    题意:随机选取x1,a,b,根据公式xi=(a*xi-1+b)%10001得到一个长度为2*n的序列,奇数项作为输入,求偶数项,若有多种,随机输出一组答案. 思路:a和b均未知,可以考虑枚举a和b,时 ...

  2. UVA 12169 Disgruntled Judge 扩展欧几里得

    /** 题目:UVA 12169 Disgruntled Judge 链接:https://vjudge.net/problem/UVA-12169 题意:原题 思路: a,b范围都在10000以内. ...

  3. UVA.12169 Disgruntled Judge ( 拓展欧几里得 )

    UVA.12169 Disgruntled Judge ( 拓展欧几里得 ) 题意分析 给出T个数字,x1,x3--x2T-1.并且我们知道这x1,x2,x3,x4--x2T之间满足xi = (a * ...

  4. UVa 12169 Disgruntled Judge 紫书

    思路还是按照紫书,枚举a,得出b, 然后验证. 代码参考了LRJ的. #include <cstdio> #include <iostream> using namespace ...

  5. Codeforces Round #451 (Div. 2) B. Proper Nutrition【枚举/扩展欧几里得/给你n问有没有两个非负整数x,y满足x·a + y·b = n】

    B. Proper Nutrition time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. UVa 12169 (枚举+扩展欧几里得) Disgruntled Judge

    题意: 给出四个数T, a, b, x1,按公式生成序列 xi = (a*xi-1 + b) % 10001 (2 ≤ i ≤ 2T) 给出T和奇数项xi,输出偶数项xi 分析: 最简单的办法就是直接 ...

  7. UVa 12169 - Disgruntled Judge(拓展欧几里德)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. UVA 12169 Disgruntled Judge(Extended_Euclid)

    用扩展欧几里德Extended_Euclid解线性模方程,思路在注释里面了. 注意数据范围不要爆int了. /********************************************* ...

  9. UVA 12169 Disgruntled Judge

    我该怎么说这道题呢...说简单其实也简单,就枚举模拟,开始卡了好久,今天看到这题没a又写了遍,看似会超时的代码交上去a了,果然实践是检验真理的唯一标准... #include <iostream ...

随机推荐

  1. js 判断字符串是否包含另外一个字符串

    示例代码: <script type="text/javascript"> var str = "测试一个字符串(ehtrzes)是否包含另外一个字符串&qu ...

  2. Android Activity 常用技巧

    1.设置 Activity 背景色为透明 在style.xml里面声明: <style name="TranslucentActivityStyle" parent=&quo ...

  3. cordova填坑

    cordova填坑

  4. WinRAR注册

    新建一个txt文件并命名为"rarreg.key",添加以下内容保存,然后放置在WinRAR安装目录: RAR registration data Federal Agency f ...

  5. iReport 中使用 Chart 图

    iReport 中使用 Chart 图 SSH2项目中需要引入如下两个jar包: jfreechart-1.0.12.jar jcommon-1.0.15.jar 从 iReport 的安装目录下搜索 ...

  6. JSP开发环境配置问题解答

    有过JSP开发经验的同学对于JSP开发环境的配置一定非常的很有感触,十分的繁琐,有时因为一个小的问题导致我们配置的配置前功尽弃,本篇我将重点带领大家一起探讨一下关于JSP环境配置的一些常见问题,及解决 ...

  7. Microsoft Naive Bayes 算法——三国人物身份划分

    Microsoft朴素贝叶斯是SSAS中最简单的算法,通常用作理解数据基本分组的起点.这类处理的一般特征就是分类.这个算法之所以称为“朴素”,是因为所有属性的重要性是一样的,没有谁比谁更高.贝叶斯之名 ...

  8. 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题

    今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...

  9. 栈的存储结构和常见操作(c 语言实现)

    俗话说得好,线性表(尤其是链表)是一切数据结构和算法的基础,很多复杂甚至是高级的数据结构和算法,细节处,除去数学和计算机程序基础的知识,大量的都在应用线性表. 一.栈 其实本质还是线性表:限定仅在表尾 ...

  10. Java面试题技术类一

    1.面向对象编程的三大特性是什么? (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 ...