update
This commit is contained in:
parent
02a4aabd9e
commit
27d3dd0aa3
@ -1,7 +1,12 @@
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <execution>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <numeric>
|
||||
#include <set>
|
||||
|
||||
using ll = int64_t;
|
||||
#define nv(v)#v<<": "<<(v)<<' '
|
||||
@ -9,7 +14,7 @@ auto &ci = std::cin;
|
||||
auto &co = std::cout;
|
||||
|
||||
const ll mxn = 1e6+5;
|
||||
ll *a{new ll[mxn]}, *fcts{new ll[mxn]}, *mnfct{new ll[mxn]};
|
||||
|
||||
auto ispm = new bool[mxn];
|
||||
|
||||
ll lb(ll n){
|
||||
@ -19,7 +24,9 @@ ll lb(ll n){
|
||||
int main(){
|
||||
ll n;
|
||||
ci>>n;
|
||||
// co<<nv(n)<<'\n';
|
||||
ll mxa{};
|
||||
ll *a{new ll[mxn+1]}, *mnfct{new ll[mxn+1]};
|
||||
for(ll i{0};i<n;i++){
|
||||
ci>>a[i];
|
||||
mxa = std::max(mxa, a[i]);
|
||||
@ -40,23 +47,77 @@ int main(){
|
||||
|
||||
// for(ll i{1};i<=mxa;i++)co<<mnfct[i]<<' ';
|
||||
// co<<'\n';
|
||||
|
||||
auto srts = new ll[mxn+1];
|
||||
ll ans{};
|
||||
for(ll i{1};i<(1<<(n));i++){
|
||||
// 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++){
|
||||
if((1<<j)&i){
|
||||
ll now = a[j];
|
||||
while(now!=1){
|
||||
// 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];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// 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]<<' ';
|
||||
// co<<'\n';
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user