This commit is contained in:
Zengtudor 2024-11-14 16:29:31 +08:00
parent 02a4aabd9e
commit 27d3dd0aa3

View File

@ -1,7 +1,12 @@
#include <algorithm> #include <algorithm>
#include <cstdint> #include <cstdint>
#include <cstdlib>
#include <cstring> #include <cstring>
#include <execution>
#include <iostream> #include <iostream>
#include <map>
#include <numeric>
#include <set>
using ll = int64_t; using ll = int64_t;
#define nv(v)#v<<": "<<(v)<<' ' #define nv(v)#v<<": "<<(v)<<' '
@ -9,7 +14,7 @@ auto &ci = std::cin;
auto &co = std::cout; auto &co = std::cout;
const ll mxn = 1e6+5; const ll mxn = 1e6+5;
ll *a{new ll[mxn]}, *fcts{new ll[mxn]}, *mnfct{new ll[mxn]};
auto ispm = new bool[mxn]; auto ispm = new bool[mxn];
ll lb(ll n){ ll lb(ll n){
@ -19,7 +24,9 @@ ll lb(ll n){
int main(){ int main(){
ll n; ll n;
ci>>n; ci>>n;
// co<<nv(n)<<'\n';
ll mxa{}; ll mxa{};
ll *a{new ll[mxn+1]}, *mnfct{new ll[mxn+1]};
for(ll i{0};i<n;i++){ for(ll i{0};i<n;i++){
ci>>a[i]; ci>>a[i];
mxa = std::max(mxa, a[i]); mxa = std::max(mxa, a[i]);
@ -40,23 +47,77 @@ int main(){
// for(ll i{1};i<=mxa;i++)co<<mnfct[i]<<' '; // for(ll i{1};i<=mxa;i++)co<<mnfct[i]<<' ';
// co<<'\n'; // co<<'\n';
auto srts = new ll[mxn+1];
ll ans{};
for(ll i{1};i<(1<<(n));i++){ for(ll i{1};i<(1<<(n));i++){
// std::fill(fcts, fcts+n, 0); // std::fill(fcts, fcts+n, 0);
memset(fcts, 0, sizeof(ll)*mxa); // memset(fcts, 0, sizeof(ll)*mxa);
auto sfs = new std::map<ll,ll>[n+1];
std::set<ll> usdfct;
// std::map<ll, ll> sfs[n+1];
for(ll j{0};j<n;j++){ for(ll j{0};j<n;j++){
if((1<<j)&i){ if((1<<j)&i){
ll now = a[j]; ll now = a[j];
while(now!=1){ while(now!=1){
// co<<nv(now)<<'\n'; // co<<nv(now)<<'\n';
fcts[mnfct[now]]++; // fcts[mnfct[now]]++;
auto it = sfs[j].find(mnfct[now]);
auto sit = usdfct.find(mnfct[now]);
if(sit==usdfct.end()){
usdfct.insert(mnfct[now]);
}
if(it==sfs[j].end()){
// sfs->insert({mnfct[now], 1});
sfs->emplace(mnfct[now], 1);
}else{
(*it).second++;
}
now/=mnfct[now]; now/=mnfct[now];
} }
} }
} }
// ll ans{};
for(ll j:usdfct){
ll sum{};
ll srtn{};
co<<"getting: "<<j<<'\n';
for(ll k{0};k<n;k++){
if(auto it = sfs[k].find(j);it!=sfs[k].end()){
co<<it->first;
srts[++srtn]=0;
srts[srtn]=it->second;
// co<<nv(it->second)<<'\n';
}
}
co<<'\n';
// for(ll k{1};k<=srtn;k++)co<<srts[k]<<' ';
// co<<'\n';
std::sort(srts+1, srts+1+srtn);
for(ll k{1};k<=srtn;k++)co<<srts[k]<<' ';
co<<'\n';
// for(ll i{1};i<=srtn;i++)sum+=srts[i];
// co<<nv(srtn)<<'\n';
ll min = std::max(1l, srtn/2+1);
// co<<nv(min)<<'\n';
if(srtn==1){
sum=srts[1];
}else{
for(ll k{1};k<=srtn;k++){
sum+=(std::abs(srts[k]-srts[min]));
co<<nv(srts[k])<<nv(srts[min])<<'\n';
}
}
// co<<'\n';
// co<<nv(j)<<'\n';
// co<<nv(srts[min])<<'\n';
// co<<"fct: "<<j<<'\n';
co<<nv(sum)<<'\n';
ans+=sum;
}
// co<<"---next sub\n";
} }
co<<ans<<'\n';
// for(ll i{1};i<=mxa;i++)co<<fcts[i]<<' '; // for(ll i{1};i<=mxa;i++)co<<fcts[i]<<' ';
// co<<'\n'; // co<<'\n';
} }