Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
39979 氩_wjy 【S】T2 C++ 通过 100 257 MS 60336 KB 3714 2026-02-10 10:09:33

Tests(20/20):


#include<bits/stdc++.h> // #define int long long #define ull unsigned long long #define i128 __int128_t #define doub long double #define PII pair<int,int> #define fir first #define sec second #define lb(x) ((x)&(-(x))) #define ctz __builtin_ctzll #define clz __builtin_clzll #define PC __builtin_popcountll #define lc(p) ((p)<<1) #define rc(p) ((p)<<1|1) // #define endl '\n' using namespace std; const int N=2507; ull n,v,seed; int a[N][N]; inline int Len(ull x){ if(!x)return 1; int ret=0; while(x){ ret++;x/=10; }return ret; } struct uint37500{ ull M[760];int L=-1; const ull B=1e15; ull &operator[](int x){return M[x];} uint37500(int x=0){ memset(M,0,sizeof(M));L=-1; while(x){M[++L]=x%B,x/=B;} } uint37500 &operator=(uint37500 r){ memset(M,0,sizeof(M));L=r.L; for(int i=0;i<=L;i++)M[i]=r[i]; return *this; } inline void Flatten(){ int rem=0; for(int i=0;i<=L;i++)M[i]+=rem,rem=M[i]/B,M[i]%=B; while(rem)M[++L]=rem%B,rem/=B; while((!M[L])&&(L>=0))L--; } bool operator>(uint37500 r){ if(L!=r.L)return L>r.L; for(int i=L;i>=0;i--){ if(M[i]!=r[i])return M[i]>r[i]; }return 0; } bool operator<(uint37500 r){ if(L!=r.L)return L<r.L; for(int i=L;i>=0;i--){ if(M[i]!=r[i])return M[i]<r[i]; }return 0; } bool operator==(uint37500 r){ if(L!=r.L)return 0; for(int i=L;i>=0;i--)if(M[i]!=r[i])return 0; return 1; } inline void Print(){ if(L==-1){cout<<0;return;} for(int i=L;i>=0;i--){ if(i!=L)for(int j=1;j<=15-Len(M[i]);j++)cout<<0; cout<<M[i]; } return; } }f[N]; uint37500 operator*(uint37500 r,int x){ for(int i=0;i<=r.L;i++)r[i]*=x; r.Flatten();return r; } namespace Generator{ 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]; } } uint37500 max(uint37500 A,uint37500 B){return A>B?A:B;} inline void slv(){ cin>>n>>v>>seed; int V=Generator::Init(n,v,seed); for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)a[i][j]=Generator::Query(i,j); // for(int i=1;i<=n;i++)for(int j=i;j<=n;j++){ // cout<<i<<" "<<j<<" "<<a[i][j]<<endl; // } f[0]=uint37500(1); for(int i=1;i<=n;i++)f[i]=uint37500(0); for(int i=1;i<=n;i++){ int Ans=1; for(int j=i;j>=1;j--){ Ans*=a[j][j]; if(Ans>V)break; f[i]=max(f[i],f[j-1]*a[j][i]); } } f[n].Print();cout<<endl; return; } signed main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifndef ONLINE_JUDGE freopen("1.in","r",stdin); freopen("1.out","w",stdout); #endif int T;cin>>T; while(T--)slv(); // uint37500 A=uint37500(3)*5; // A.Print(); return 0; }


测评信息: