Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38805 23级徐泽厚 【S】T1 C++ 运行出错 90 102 MS 133668 KB 3890 2025-10-29 15:44:21

Tests(9/10):


#include <bits/stdc++.h> #define int long long using namespace std; int x,k,m; vector<int> a; vector<int> as[100005]; int used[100005]; vector<vector<int>> p; map<int,int> mp; int yjg=0; int las=0; void sch(int n){ vector<int> jr; for (int i=1;i*i<=n;i++){ if (n%i==0){ jr.push_back(i); jr.push_back(n/i); if (i==(n/i)){ jr.pop_back(); } } } sort(jr.begin(),jr.end()); as[n]=jr; used[n]=1; return ; } vector<int> sch2(int n){ vector<int> jr; for (int i=1;i*i<=n;i++){ if (n%i==0){ jr.push_back(i); jr.push_back(n/i); if (i==(n/i)){ jr.pop_back(); } if (jr.size()>m) jr.pop_back(); if (jr.size()==m){ sort(jr.begin(),jr.end()); return jr; } } } sort(jr.begin(),jr.end()); return jr; } void slv(){ a.push_back(x); while (k--){ vector<int> nt; int lsize=0; for (int sss=0;sss<a.size();sss++){ int v=a[sss]; if (v<=100000){ if (used[v]){ for (int ind=0;ind<as[v].size();ind++){ nt.push_back(as[v][ind]); // lsize++; lsize=nt.size(); if (lsize==m) ind=as[v].size(); } if (lsize==m) sss=a.size(); } else{ sch(v); for (int ind=0;ind<as[v].size();ind++){ nt.push_back(as[v][ind]); // lsize++; lsize=nt.size(); if (lsize==m) ind=as[v].size(); } if (lsize==m) sss=a.size(); } } else{ vector<int> ls=sch2(v); for (int ind=0;ind<ls.size();ind++){ nt.push_back(ls[ind]); lsize=nt.size(); if (lsize==m) ind=ls.size(); } } } a=nt; } int sum=0; int lth; if (a.size()<m){ lth=a.size(); } else{ lth=m; } for (int i=0;i<lth;i++){ sum+=a[i]; // printf("%lld ",a[i]); } printf("%lld\n",sum); } void pre(){ for (int i=1;i*i<=x;i++){ if (x%i!=0) continue; a.push_back(i); a.push_back(x/i); if (i==x/i){ a.pop_back(); } } sort(a.begin(),a.end()); // for (int i=0;i<a.size();i++){ // mp[a[i]]=i; // } // vector<int> sss; // sss.push_back(1); // p.push_back(sss); // for (int i=0;i<a.size();i++){ // int u=a[i]; // if (u==1){ // continue; // } // vector<int> ls; // for (int j=0;j<i;j++){ // if (a[i]%a[j]==0){ // ls.push_back(a[j]); // } // } // p.push_back(ls); // } return ; } void dfs(int cs,int nm){ if (m<=0){ return ; } if (cs==0 or nm==1){ m--; yjg+=nm; return ; } for (auto t:a){ if (m<=0 or nm<t){ break; } if (nm%t==0){ dfs(cs-1,t); } } } signed main(){ scanf("%lld%lld%lld",&x,&k,&m); // if (k>=m){ // printf("%lld\n",m); // exit(0); // //+10pts // } // if (k<=5 or m<=500){ // slv(); // exit(0); // //70pts // } pre(); dfs(k,x); cout<<yjg<<"\n"; return 0; }


测评信息: