ARC105_B問題、C++ set priority_que
priority_queを使った解法
#include <bits/stdc++.h> using namespace std; using ll = long long; #define rep(i,n) for(ll i=0; i<n; i++) int main() { ll n; cin >> n; ll min = 1e9; priority_queue<int> que; rep(i,n){ ll a; cin >> a; if(min>a) min = a; que.push(a); } while(!que.empty()){ ll x = que.top(); que.pop(); if(x == min) break; ll y = x%min; if(y){ if(min>y) min = y; que.push(y); } } cout << min << '\n'; return 0; }
setを使った解法は以下の様にになる。
void solve() { LL(n); ll min = 1e9; set<ll> st; rep(i,n){ LL(a); chmin(min, a); st.insert(a); } while(st.size()>0){ auto itr = st.end(); itr--; ll x = *itr; if(x == min) break; st.erase(x); ll y = x%min; if(y){ chmin(min, y); st.insert(y); } } cout << min << '\n'; }
void solve() { LL(n); set<ll> st; rep(i,n){ LL(a); st.insert(a); } while(st.size()>0){ auto itr = st.end(); itr--; ll x = *itr; if(x == *(st.begin())) break; st.erase(x); if(x%*(st.begin())) st.insert(x%*(st.begin())); } cout << *(st.begin()) << '\n'; }