Submission #691410

#TimeUsernameProblemLanguageResultExecution timeMemory
691410HuySirni (COCI17_sirni)C++17
140 / 140
1504 ms170052 KiB
#include<bits/stdc++.h> //#define int long long #define pii pair<int,int> #define fi first #define se second #pragma GCC tarGet ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") #pragma GCC optimize("Ofast") #pragma GCC tarGet("avx,avx2,fma") using namespace std; using ll = long long; const int mod = 1e9+7; const int maxN = 1e5+5; const int N = 1e7; const ll infty = 1e16; void InputFile() { freopen("test.inp","r",stdin); //freopen("SHOPPING.out","w",stdout); //freopen("test.out","r",stdin); } struct TEdge { int a,b,c; }; bool FA(TEdge a,TEdge b) { return a.c < b.c; } vector<TEdge> vc; int n; int a[maxN]; int marc[N+1]; int lab[N+1]; int maxi = 0; int Findset(int u) { if(lab[u] < 0) return u; return lab[u] = Findset(lab[u]); } ll res = 0; int cnt_e = 0; bool Merge(int u,int v,int val) { u = Findset(u); v = Findset(v); if(u == v) return false; if(lab[u] > lab[v]) swap(u,v); res += val; cnt_e++; lab[u] += lab[v]; lab[v] = u; return true; } void Read() { cin >> n; for(int i = 1;i <= n;i++) { cin >> a[i]; marc[a[i]] = 1; maxi = max(maxi,a[i]); lab[a[i]] = -1; } if(a[1] == 1) { cout << 0 <<'\n'; return; } sort(a + 1,a + n + 1); for(int i = 1;i <= maxi;i++) { marc[i] += marc[i-1]; } for(int i = 1;i <= n;i++) { if(a[i] == a[i-1]) {cnt_e++;continue;} for(int j = a[i];j <= maxi;j += a[i]) { if(marc[j+a[1]-1] - marc[j-1]) { int x = j; if(x == a[i]) x++; int v = lower_bound(a + 1,a + n + 1,x) - a; if(v > n) continue; v = a[v]; int val = v % a[i]; vc.push_back({a[i],v,val}); } } } //cout <<"Dark";return; sort(vc.begin(),vc.end(), FA); for(TEdge x : vc) { Merge(x.a,x.b,x.c); } //cout << cnt_e;return; cout << res + (ll)(n - 1 - cnt_e) * (ll)a[1]; } void Solve() { } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); //InputFile(); //int sub_type; //cin >> sub_type; //Sieve(); //Prepare(); int test; //cin >> test; test = 1; while(test--) //for(int prc = 1; prc <= test; prc++) { Read(); Solve(); //Debug(); } }

Compilation message (stderr)

sirni.cpp:6: warning: ignoring '#pragma GCC tarGet' [-Wunknown-pragmas]
    6 | #pragma GCC tarGet ("avx2")
      | 
sirni.cpp:7: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    7 | #pragma GCC optimization ("O3")
      | 
sirni.cpp:8: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    8 | #pragma GCC optimization ("unroll-loops")
      | 
sirni.cpp:10: warning: ignoring '#pragma GCC tarGet' [-Wunknown-pragmas]
   10 | #pragma GCC tarGet("avx,avx2,fma")
      | 
sirni.cpp: In function 'void InputFile()':
sirni.cpp:19:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |     freopen("test.inp","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...