题意:给出整数n,给出一个序列中的部分数据t1,t3,t5...t(2 * n),有公式ti = (t(i - 1) * a + b) % 10001,0<=n,a,b<=10000,求出t2,t4,...t(2 * n - 1)
思路:暴力枚举a和b进行计算序列,若计算得出的值和给出数据不同,则继续尝试,知道找的正确答案
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
const int maxn = 200 + 2;
int n,s[maxn];
int main()
{
bool sign;
scanf("%d",&n);
for(int i = 1;i <= 2 * n;i += 2) scanf("%d",&s[i]);
for(int a = 0;a <= 10000;a++)
{
for(int b = 0;b <= 10000;b++)
{
sign = true;
for(int i = 2;i <= 2 * n;i++)
{
if(i & 1)
{
int x = (a * s[i - 1] + b) % 10001;
if(x != s[i])
{
sign = false;
break;
}
}
else
{
s[i] = (a * s[i - 1] + b) % 10001;
}
}
if(sign) break;
}
if(sign) break;
}
for(int i = 2;i <= 2 * n;i += 2)
{
printf("%d\n",s[i]);
}
return 0;
}