結果
| 問題 | No.1059 素敵な集合 |
| コンテスト | |
| ユーザー |
Hyado
|
| 提出日時 | 2020-05-22 22:40:19 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 11 ms / 2,000 ms |
| コード長 | 2,938 bytes |
| コンパイル時間 | 1,673 ms |
| コンパイル使用メモリ | 175,460 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-23 09:32:06 |
| 合計ジャッジ時間 | 2,470 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
using ld = long double;
template<typename T> using V = vector<T>;
template<typename T> using VV = vector<vector<T>>;
#define fs first
#define sc second
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define all(v) (v).begin(),(v).end()
#define siz(v) (ll)(v).size()
#define rep(i,a,n) for(ll i=a;i<(ll)(n);++i)
#define repr(i,a,n) for(ll i=n-1;(ll)a<=i;--i)
#define ENDL '\n'
typedef pair<int,int> Pi;
typedef pair<ll,ll> PL;
constexpr ll mod = 1000000007;
constexpr ll INF = 1000000099;
constexpr ll LINF = (ll)(1e18 +99);
const vector<ll> dx={-1,1,0,0},dy={0,0,-1,1};
template<typename T,typename U> inline bool chmin(T& t, const U& u){if(t>u){t=u;return 1;}return 0;}
template<typename T,typename U> inline bool chmax(T& t, const U& u){if(t<u){t=u;return 1;}return 0;}
template<typename T> inline T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<typename T,typename Y> inline T mpow(T a, Y n) {
T res = 1;
for(;n;n>>=1) {
if (n & 1) res = res * a;
a = a * a;
}
return res;
}
template<typename T,typename Y>
ostream& operator<<(ostream& os,const pair<T,Y>& p){
return os<<"{"<<p.fs<<","<<p.sc<<"}";
}
template<typename T> ostream& operator<<(ostream& os,const V<T>& v){
os<<"{";
for(auto e:v)os<<e<<",";
return os<<"}";
}
template<typename ...Args>
void debug(Args&... args){
for(auto const& x:{args...}){
cerr<<x<<' ';
}
cerr<<ENDL;
}
vector<bool> eratosthenes(int N)
{
vector<bool> v(N + 1, true);
v.at(1) = false;
for (int i = 2; i * i < N + 1; i++)
{
if (v.at(i) == true)
{
for (int j = i * i; j < N + 1; j += i)//i^2からスタートしてよい
{
v.at(j) = false;
}
}
}
return v;
}
template<typename T>
struct UnionFind {
vector<T> Parent;
UnionFind(T N) {
Parent = vector<T>(N, -1);
}
T root(T A) {
if (Parent[A] < 0) return A;
return Parent[A] = root(Parent[A]);
}
T size(T A) {
return -Parent[root(A)];
}
bool connect(T A, T B) {
A = root(A);
B = root(B);
if (A == B) return false;
if (size(A) < size(B)) swap(A, B);
Parent[A] += Parent[B];
Parent[B] = A;
return true;
}
bool same(T A,T B){
return root(A)==root(B);
}
};
signed main(){
cin.tie(0);ios::sync_with_stdio(false);
cout<<fixed<<setprecision(20);
ll l,r;cin>>l>>r;
ll ans=0;
UnionFind<int> u(r+1);
rep(i,l,r+1){
ll now=2*i;
while(now<=r){
u.connect(i,now);
now+=i;
}
}
rep(i,l,r+1){
if(u.root(i)==i)ans++;
}
cout<<ans-1<<ENDL;
}
//! ( . _ . ) !
//CHECK overflow,vector_size,what to output?
Hyado