更新 CMakeLists.txt 以支持 C++20,并添加新的 T634197s1.cpp 文件实现算法

This commit is contained in:
Zengtudor 2025-07-24 14:15:53 +08:00
parent 3992f382a3
commit e471e87897
2 changed files with 82 additions and 1 deletions

View File

@ -4,7 +4,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_compile_options(-Wall)
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

81
src/7/24/T634197s1.cpp Normal file
View File

@ -0,0 +1,81 @@
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <limits>
#include <vector>
using ll = int64_t;
ll t,s,k1,k2,ans=std::numeric_limits<ll>::max();
std::vector<ll> f;
bool found = false;
template<class ...Ts>
void log(Ts&&...ts){
// std::cout<<"Log:: ";
// ((std::cout<<ts<<' '),...);
// std::cout<<'\n';
}
/*
now = v1+v1*m1+v1*m1*m2...
=v1(1+m1+m1*m2)
*/
void dfs(ll now,ll time,ll nowv){
if(now==ans){
// log("at s","now",now,"time",time,"nowv",nowv);
}
if(found)return;
if(time>=ans)return;
if(now>=s){
if(now!=s || time==1)return;
ans=std::min(ans,time);
// log("now",now,"time",time,"nowv",nowv);
return;
}
// log("now",now,"time",time,"nowv",nowv);
for(ll i=k2;i>=k1;i--){
dfs(now+nowv*i,time+1,nowv*i);
}
}
int main(){
std::cin>>t;
while(t--){
std::cin>>s>>k1>>k2;
log("s",s,"k1",k1,"k2",k2);
ans=std::numeric_limits<ll>::max();
found=false;
f.clear();
ll ns=s;
f.push_back(1);
while(ns!=1){
for(ll i=2;i*i<=s;i++){
if(ns%i==0){
f.push_back(i);
ns/=i;
goto next;
}
}
f.push_back(ns);
ns/=ns;
next:;
}
log("f[i].start");
for(ll i=0;i<f.size();i++){
log("f[i]",f[i]);
}
log("f[i].end");
if(ns!=0){
f.push_back(ns);
}
log("f.size()",f.size());
for(ll i=0;i<f.size();i++){
dfs(f[i],1,f[i]);
}
std::cout<<(ans==std::numeric_limits<ll>::max()?-1:ans)<<'\n';
}
}