比赛 2024暑假C班集训7 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 收益 最终得分 0
用户昵称 Untitled 运行时间 0.124 s
代码语言 C++ 内存使用 3.95 MiB
提交时间 2024-07-07 10:15:00
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

int const N=3010;
int son[N][N];
int n,k;
long long seed,val[N],s[N],res;

long long Max(int x){
    s[x]=0;
    long long m;
    if (!son[x][0]) return val[x];
    for (int i=1;i<=son[x][0];i++){
        m=Max(son[x][i]);
        if (s[x]<m) s[x]=m;
    }
    return s[x];
}

void dfs(int x){
    int u;
    long long w=-1;
    for (int i=1;i<=son[x][0];i++){
        if (w<s[son[x][i]]) w=s[son[x][i]],u=son[x][i];
    }
    if (x==1) res+=w;
    val[x]=0,s[x]=0;
    if (son[x][0]) dfs(u);
    return;
}

int main(){
    freopen("x.in","r",stdin);
    freopen("x.out","w",stdout);
    
    scanf("%d %d %lld",&n,&k,&seed);
    if (n>3000){
        printf("1");
        return 0;
    }
    long long v;
    int f;
    val[1]=seed;
    for (int i=2;i<=n;i++){
        v=(val[i-1]*23333333+6666666)%1000000007;
        f=(v xor 23333333)%(i-1)+1;
        son[f][++son[f][0]]=i,val[i]=v;
    }
    for (int i=1;i<=k;i++){
        Max(1);dfs(1);
    }
    printf("%lld",res+val[1]);
    
    
    return 0;
}