| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 39946 | LYLAKIOIAKIOI | 【S】T2 | C++ | 通过 | 100 | 1214 MS | 94380 KB | 2706 | 2026-02-09 20:17:51 |
#include<bits/stdc++.h> namespace Generator{ using ull=unsigned long long; int real_n,real_v=0,real_seed; ull RandInteger(){ ull seed=real_seed; seed^=seed<<5; seed^=seed>>11; seed^=seed<<54; return real_seed=seed; } int GetInteger(){ return RandInteger()%real_v+1; } const int MaxN=2550; int result[MaxN][MaxN]; int Init(int n,int v,ull seed){ real_n=n; real_v=1ll<<(v-1); real_seed=seed; for(int i=1;i<=n;i++){ for(int j=1;j<i;j++) result[i][j]=0; for(int j=i;j<=n;j++) result[i][j]=GetInteger(); }return real_v; } int Query(int x,int y){ if(x<1||y<1||x>real_n||y>real_n){ fprintf(stderr,"Illegal position\n"); fflush(stderr);assert(0); }return result[x][y]; } } using ull=unsigned long long; using namespace std; const int N=5050; const long double alpha=0.35; const ull lgB=15,B=powl(10,lgB); const int LM=N*alpha; struct Int{ ull a[LM+10]; void init(){ memset(a,0,sizeof(a));a[0]=1; } void mul(int x){ for(int i=0;i<=LM;i++) a[i]*=x; for(int i=0;i<=LM;i++){ a[i+1]+=a[i]/B;a[i]%=B; } } bool gra(const Int &x){ for(int i=LM;i>=0;i--){ if(a[i]>x.a[i]) return 1; if(a[i]<x.a[i]) return 0; }return 0; } void print(){ bool fl=0; vector<char> vc; for(int i=LM;i>=0;i--){ if(a[i]) fl=1; for(int j=14;j>=0;j--){ vc.push_back((a[i]/(ull)powl(10,j))%10+'0'); } }reverse(vc.begin(),vc.end()); while(!vc.empty()){ if(vc.back()=='0') vc.pop_back();else break; }reverse(vc.begin(),vc.end()); for(auto ed:vc) cout<<ed;cout<<endl; } }; Int f[N];int a[N][N]; int n,V;ull seed; ull rd(){ seed^=seed<<5; seed^=seed>>11; seed^=seed<<54; return seed; } void solve(){ cin>>n>>V>>seed; V=Generator::Init(n,V,seed); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) a[i][j]=Generator::Query(i,j); } f[0].init(); Int tmp; for(int i=1;i<=n;i++){ int mx=0;f[i].init(); for(int j=i-1;j>=0;j--){ if(a[j+1][i]<=mx) continue; mx=a[j+1][i]; tmp=f[j];tmp.mul(a[j+1][i]); if(tmp.gra(f[i])) f[i]=tmp; } }f[n].print(); } int main(){ //freopen("maximum.in","r",stdin); //freopen("maximum.out","w",stdout); int t;cin>>t; while(t--) solve(); return 0; }