/ Vijos / 题库 /

夜夜的数据加强

夜夜的数据加强

背景

有些事情总会让夜夜和更多的人恼火。举个例子吧...
你AC了一个题目,可是你总感觉那个题目数据太水了......
那是一个树形的题目,为了生成一颗树,作者表示你要用特定的办法来生成树.理论上这个数据是随机的.
然而,你发现,你可以想办法把这个”随机”的数据给变成不随机的,换句话说,你只要找到合适的初始值,就可以让这个代码生成你想要的树.

描述

那一段代码如下

[C/C++代码]

int X,A,B,C;
int random()
{
int Return_Value=X;
X=((long long)X*A+B)%C;
return Return_Value;
}
void make_tree()
{
for (int i=1;i<n;i++) fa[i]=random()%i;
}

[Pascal代码][出题人不记得怎么写了...大概就写成这样吧能看就行]

var x,a,b,c:int64;i:longint;
function random:longint;
var Return_Value:longint;
begin
Return_Value:=x;
x:=(x*a+b) mod c;
exit(Return_Value);
end;
procedure make_tree;
begin
for i:=1 to n-1 do
fa[i]:=random() mod i;
end;

  现在,你已经构造出了一组fa[i]使得某个程序炸掉,问题是,你该怎么构造整数X,A,B来构造整个fa数组?如果有多个构造方案,请全部输出出来.注意:0<=X,A,B<C

格式

输入格式

第一行两个整数,n和c
第二行,n-1个整数,即fa[1],fa[2],fa[3],...,fa[n-1]

输出格式

若干行
每一行,三个整数,X,A,B
注意:X,A,B<C(很重要所以说两遍)
如果有多个,请先输出X小的,再输出X大的(即以X为第一关键字从小到大输出)
如果还有多个,请先输出A小的,再输出A大的(即以A为第二关键字从小到大输出)
如果仍然有多个,请先输出B小的,再输出B大的(即以B为第三关键字从小到大输出)
如果一个构造方案也没有,请输出”Unsuccessful Hack Attempt”(不含引号,注意大小写)

样例1

样例输入1

5 3
0 1 2 3

样例输出1

Unsuccessful Hack Attempt

限制

对于20%的数据,n=1
对于45%的数据,n<=5,c<=5
前45%的数据和最后5%的数据,对于c和n之间无任何保证
对于70%的数据,n<=40000,c<=50
对于95%的数据,n<=100000,c<=300
在45%~95%这些数据中,保证c<n-10
对于100%的数据,n<=100000,c<=400,fa[i]<=10000
数据保证,输出文件不超过1MB

每一个测试点时限1秒。

提示

对于样例,在mod 3的条件下,是永远得不到3的

信息

ID
1965
难度
9
分类
d 点击显示
标签
(无)
递交数
638
已通过
8
通过率
1%
被复制
3
上传者

相关

在下列训练计划中:

RP++分类题库

在下列比赛中:

夜夜的模拟赛之十三岁的梦想