题目大意:有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. github无法访问?试试修改hosts

    github国内无法访问时,可以试试如下修改hosts,亲测有效: 204.232.175.78 http://documentcloud.github.com 207.97.227.239 http ...

  2. Spring-Context的注解实现依赖注入功能

    使用Spring-Context的注解实现依赖注入功能. Demo要点: 本例子中主要使用Annotation功能来实现对MoviceService的注入.我们将Cinema.java的头部标注为@C ...

  3. CSS旧版flex及兼容

    × 目录 [1]适用范围 [2]伸缩项目 [3]伸缩流方向[4]伸缩流换行[5]主轴对齐[6]伸缩性[7]显示顺序[8]flex兼容 前面的话 flex弹性盒模型有3个版本: 旧版本.混合版本和新版本 ...

  4. hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)

    /************************************************************************* > File Name: j.cpp > ...

  5. java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)

    import java.util.concurrent.locks.*; class DuckMsg{ int size;//烤鸭的大小 String id;//烤鸭的厂家和标号 DuckMsg(){ ...

  6. Waves – 赞!超炫交互体验的点击动画效果

    Waves 点击效果的灵感来自于谷歌的材料设计,很容易使用.只需要引入 waves.min.css 和 waves.min.js 到 HTML 文件中可以使用了.采用 touchstart 与 tou ...

  7. 解决gradle /Users/xxxx/Documents/workspace/fontmanager/.gradle/2.2.1/taskArtifacts/cache.properties (No such file or directory)报错办法

    git 上down下项目后,发现Android Studio报错: What went wrong: java.io.FileNotFoundException: /Users/raomengyang ...

  8. Windows Azure Virtual Machine (33) Azure虚拟机删除重建

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的重建Azure虚拟机,必须在同一个订阅内删除重建,必须在同一个订阅内删除重建,必须在同一个订阅内删除重建. ...

  9. Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的是国内由世纪互联运维的Windows Azure服务. 项目文件请在这里下载. 我们在使用Azure平台的时 ...

  10. 用vue实现模态框组件

    基本上每个项目都需要用到模态框组件,由于在最近的项目中,alert组件和confirm是两套完全不一样的设计,所以我将他们分成了两个组件,本文主要讨论的是confirm组件的实现. 组件结构 < ...