/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 2ms 1.277 MiB
#2 Accepted 1ms 1.32 MiB
#3 Accepted 72ms 1.758 MiB
#4 Accepted 55ms 1.488 MiB
#5 Accepted 91ms 1.492 MiB
#6 Accepted 25ms 1.516 MiB
#7 Accepted 26ms 1.5 MiB
#8 Accepted 38ms 1.504 MiB
#9 Accepted 45ms 1.508 MiB
#10 Accepted 14ms 1.543 MiB
#11 Accepted 7ms 1.508 MiB
#12 Accepted 358ms 1.543 MiB
#13 Accepted 558ms 1.75 MiB
#14 Accepted 805ms 1.555 MiB

Code

#include<bits/stdc++.h>
using namespace std;
const long long M=2e4+10,MOD=1000000007;
typedef long long ll;
int p[M];
int r[M];
vector<ll>vec[M],val[M];
int find(int x){
    if(p[x]==x)return x;
    else return find(p[x]);
}
void combine(int x,int y){
int a=find(x);
int b=find(y);
if(a==b)return;
if(r[a]>r[b]){
    r[a]+=r[b];
    p[b]=a;
}
else{
    r[b]+=r[a];
    p[a]=b;
}
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t=1;
    cin>>t;
    while(t--){
      int n,k;
      cin>>n>>k;
      vector<ll>a(n+1);
      for(int i=1;i<=n;i++)cin>>a[i];
      for(int i=1;i<=n;i++)p[i]=i,r[i]=1;
      for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++){
            int gd=__gcd(a[i],a[j]);
            if(gd>1){
                combine(i,j);
            }
        }
      }
      for(int i=1;i<=n;i++){
        int x=find(i);
        vec[x].push_back(i);
      }
      for(int i=1;i<=n;i++){
        vector<ll>v;
        for(auto it:vec[i]){
            v.push_back(a[it]);
            //cout<<it<<" ";
        }
        sort(v.rbegin(),v.rend());
        for(auto it:v)val[i].push_back(it);
           // cout<<endl;

      }

     ll mx=0;
     for(int i=1;i<=n;i++){
        int l=i;
        int r=i+k-1;
        int cnt=0;
        ll sum=0;
      //  cout<<"index"<<i<<"\n";
        for(int j=1;j<=n;j++){
            cnt=0;
        for(auto it:vec[j]){
            if(it>=l && it<=r){
               // cout<<val[j][cnt]<<" ";
                sum+=val[j][cnt];
                cnt++;
            }
        }
       // cout<<d<<endl;
    }
       //cout<<d<<endl;
        mx=max(mx,sum);
     }
     cout<<mx<<"\n";
     for(int i=1;i<=n;i++){
        vec[i].clear();
        val[i].clear();
     }

     

    }




    
   
   return 0;
 
}

Information

Submit By
Type
Submission
Problem
P1063 Another Maximum Sum in Subarray
Language
C++20 (G++ 13.2.0)
Submit At
2024-05-24 09:39:48
Judged At
2024-05-24 09:39:48
Judged By
Score
100
Total Time
805ms
Peak Memory
1.758 MiB