DP 复杂度是O(N^2)的。最后一组数据T掉了,改天再改改吧。
UPD:过了最后一组,开了编译器优化,并且将数组的两个维度换了一下,利用了局部防存。
// 90 points
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <cstdio>
const int maxn=5000;
const long long inf=0x7fffffffffff;
int n,m,A,B,Q,X0,col[maxn][maxn],row[maxn][maxn];
long long dp[maxn],v;
int main()
{
scanf("%d%d%d%d%d%d",&n,&m,&A,&B,&Q,&X0);
for (int i=0;i<n-1;++i)
for (int j=0;j<m;++j)
col[i][j]=X0=(1LL*A*X0+B)%Q;
for (int i=1;i<=n-2;++i)
for (int j=0;j<m-1;++j)
row[i][j]=X0=(1LL*A*X0+B)%Q;
for (int i=0;i<n-1;++i)
dp[i]=col[i][0];