20220813牛客第八场

Longest Common Subsequence

题目大意:
给定n,m,p,x,a,b,c七个数,n是数组1的长度,m是数组2的长度,先给数组1依次赋值,再给数组2依次赋值。
赋值的值为x,每次赋值之前x都更新为(axx + b*x + c) mod p
问最后a与b中的最长公共子序列

input:
2
4 3 1024 1 1 1 1
3 4 1024 0 0 0 0

output:
0
3

解:
在两个数组中找到相同的值,那么两个数组后面所有的值都相同

#include<bits/stdc++.h>
using namespace std;

#define endl '\n'

#define int long long

int n, m, x, a, b, c, p;
unordered_map<int, int> map1;

void solve() {
    map1.clear();
    cin >> n >> m >> p >> x >> a >> b >> c;
    a %= p, b %= p, c %= p, x %= p;
    int i, j;
    for (i = 1; i <= n; i++) {
        x = (a * x % p * x % p + b * x % p + c) % p;
        if (map1.count(x) == 0) {
            map1[x] = i;
        }
    }
    int res = 0;
    for (j = 1; j <= m; j++) {
        x = (a * x % p * x % p + b * x % p + c) % p;
        if (map1.count(x) > 0) {
            i = map1[x];
            res = max(res, min(n - i + 1, m - j + 1));
        }
    }
    cout << res << endl;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}

其他的题目不是给我这种菜鸡做的

#ACM#
全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务