Submission #679694

#TimeUsernameProblemLanguageResultExecution timeMemory
679694baneSirni (COCI17_sirni)C++17
14 / 140
879 ms786432 KiB
#include<bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") using namespace std; using ll = long long; using db = long double; using llu = unsigned long long; using str = string; // pairs using pii = pair<int,int>; using pll = pair<ll,ll>; using pdb = pair<db,db>; #define mp make_pair #define fr first #define sc second #define tcT template<class T #define tcTU tcT, class U tcT> using V = vector<T>; tcT, size_t SZ> using AR = array<T,SZ>; using vi = V<int>; using vb = V<bool>; using vl = V<ll>; using vd = V<db>; using vs = V<str>; using vpi = V<pii>; using vpl = V<pll>; using vpd = V<pdb>; #define ms0(x) memset(x , 0, sizeof(x)) #define sz(x) int((x).size()) #define bg(x) begin(x) #define all(x) bg(x), end(x) #define rall(x) x.rbegin(), x.rend() #define sor(x) sort(all(x)) #define rsz resize #define ins insert #define pb push_back #define eb emplace_back #define ft front() #define bk back() #define lb lower_bound #define ub upper_bound tcT> int lwb(V<T>& a, const T& b) { return int(lb(all(a),b)-bg(a)); } tcT> int upb(V<T>& a, const T& b) { return int(ub(all(a),b)-bg(a)); } // loops #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define F0R(i,a) FOR(i,0,a) #define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i) #define R0F(i,a) ROF(i,0,a) #define rep(a) F0R(_,a) #define each(a,x) for (auto& a: x) const int MOD = (int)2019201949; // 998244353; const int MX = (int)2e5+5; const ll BIG = 1e18; const db PI = acos((db)-1); using ld = long double; const int dx[4] = {0,1,0,-1}; const int dy[4] = {-1,0,1,0}; #define Mint mi struct mi { int v; explicit operator int() const { return v; } mi() { v = 0; } mi(long long _v) : v(_v % MOD) { v += (v < 0) * MOD; } }; mi& operator+=(mi& a, mi b) { if ((a.v += b.v) >= MOD) a.v -= MOD; return a; } mi& operator-=(mi& a, mi b) { if ((a.v -= b.v) < 0) a.v += MOD; return a; } mi operator+(mi a, mi b) { return a += b; } mi operator-(mi a, mi b) { return a -= b; } mi operator*(mi a, mi b) { return mi((long long) a.v * b.v); } mi& operator*=(mi& a, mi b) { return a = a * b; } mi pow(mi a, long long p) { assert(p >= 0); return p == 0 ? 1 : pow(a * a, p / 2) * (p & 1 ? a : 1); } mi inv(mi a) { assert(a.v != 0); return pow(a, MOD - 2); } mi operator/(mi a, mi b) { return a * inv(b); } struct DSU { vector<int> e; void init(int N) { e = vector<int>(N, -1); } int get(int x) { return e[x] < 0 ? x : e[x] = get(e[x]); } bool same_set(int a, int b) { return get(a) == get(b); } int size(int x) { return -e[get(x)]; } bool unite(int x, int y) { x = get(x), y = get(y); if (x == y) return false; if (e[x] > e[y]) swap(x, y); e[x] += e[y]; e[y] = x; return true; } }; void setIO(string name = "") { cin.tie(0)->sync_with_stdio(0); if (sz(name)) { freopen((name + ".in").c_str(), "r", stdin); freopen((name + ".out").c_str(), "w", stdout); } } struct Edge{ ll cost; bool col; int id; }; int main() { setIO(""); int n; cin >> n; vector<int>a(n); for (int i = 0; i<n; i++)cin >> a[i]; a.resize(distance(a.begin(), unique(a.begin(), a.end()))); sort(a.begin(),a.end()); int dp[a[n-1] + 1]; memset(dp, -1 ,sizeof(dp)); for (int i = 0; i<n; i++){ dp[a[i]] = i; } for (int i = a[n-1] - 1; i>=0; i--){ if (dp[i] == -1)dp[i] = dp[i + 1]; } //cout<<endl; DSU dsu;dsu.init(n+1); ll sum = 0; vector<pair<int,pair<int,int>>>edges; for (int i = 0; i<n; i++){ if (i < n - 1)edges.pb(mp(a[i+1]%a[i], mp(i,i+1))); for (int j = 2*a[i]; j<=a[n-1]; j+=a[i]){ //cout<<j<<" "<<dp[j]<<endl; edges.pb(mp(a[dp[j]]%a[i], mp(i,dp[j]))); } } sort(edges.begin(), edges.end(), [](auto &x, auto &y){ return (x.fr < y.fr); }); for (int i = 0; i<edges.size(); i++){ if (dsu.size(0) == n)break; if (dsu.unite(edges[i].sc.fr, edges[i].sc.sc))sum+=edges[i].fr; } cout<<sum; return 0; }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:151:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  151 |  for (int i = 0; i<edges.size(); i++){
      |                  ~^~~~~~~~~~~~~
sirni.cpp: In function 'void setIO(std::string)':
sirni.cpp:109:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  109 |         freopen((name + ".in").c_str(), "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sirni.cpp:110:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |         freopen((name + ".out").c_str(), "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...