結果
問題 | No.1265 Balloon Survival |
ユーザー |
![]() |
提出日時 | 2020-10-23 23:59:06 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 130 ms / 2,000 ms |
コード長 | 9,437 bytes |
コンパイル時間 | 13,727 ms |
コンパイル使用メモリ | 305,260 KB |
最終ジャッジ日時 | 2025-01-15 14:26:51 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 32 |
ソースコード
#line 2 "cpplib/util/template.hpp"#pragma GCC optimize("Ofast")#pragma GCC optimize("unroll-loops")#pragma GCC target("avx")#include<bits/stdc++.h>using namespace std;struct __INIT__{__INIT__(){cin.tie(0);ios::sync_with_stdio(false);cout<<fixed<<setprecision(15);}}__INIT__;typedef long long lint;#define INF (1LL<<60)#define IINF (1<<30)#define EPS (1e-10)#define endl ('\n')typedef vector<lint> vec;typedef vector<vector<lint>> mat;typedef vector<vector<vector<lint>>> mat3;typedef vector<string> svec;typedef vector<vector<string>> smat;template<typename T>inline void output(T t){bool f=0;for(auto i:t){cout<<(f?" ":"")<<i;f=1;}cout<<endl;}template<typename T>inline void output2(T t){for(auto i:t)output(i);}template<typename T>inline void debug(T t){bool f=0;for(auto i:t){cerr<<(f?" ":"")<<i;f=1;}cerr<<endl;}template<typename T>inline void debug2(T t){for(auto i:t)output(i);}#define loop(n) for(long long _=0;_<(long long)(n);++_)#define rep(i,...) for(auto i:range(__VA_ARGS__))#define rrep(i,...) for(auto i:reversed(range(__VA_ARGS__)))#define repi(i,a,b) for(lint i=lint(a);i<(lint)(b);++i)#define rrepi(i,a,b) for(lint i=lint(b)-1;i>=lint(a);--i)#define irep(i) for(lint i=0;;++i)inline vector<long long> range(long long n){if(n<=0)return vector<long long>();vector<long long>v(n);iota(v.begin(),v.end(),0LL);return v;}inline vector<long long> range(long long a,long long b){if(b<=a)return vector<long long>();vector<long long>v(b-a);iota(v.begin(),v.end(),a);return v;}inline vector<long long> range(long long a,long long b,long long c){if((b-a+c-1)/c<=0)return vector<long long>();vector<long long>v((b-a+c-1)/c);for(int i=0;i<(int)v.size();++i)v[i]=i?v[i-1]+c:a;return v;}template<typename T>inline T reversed(T v){reverse(v.begin(),v.end());return v;}#define all(n) begin(n),end(n)template<typename T,typename E>bool chmin(T& s,const E& t){bool res=s>t;s=min<T>(s,t);return res;}template<typename T,typename E>bool chmax(T& s,const E& t){bool res=s<t;s=max<T>(s,t);return res;}const vector<lint> dx={1,0,-1,0,1,1,-1,-1};const vector<lint> dy={0,1,0,-1,1,-1,1,-1};#define SUM(v) accumulate(all(v),0LL)template<typename T,typename ...Args>auto make_vector(T x,int arg,Args ...args){if constexpr(sizeof...(args)==0)return vector<T>(arg,x);else returnvector(arg,make_vector<T>(x,args...));}#define extrep(v,...) for(auto v:__MAKE_MAT__({__VA_ARGS__}))vector<vector<long long>> __MAKE_MAT__(vector<long long> v){if(v.empty())return vector<vector<long long>>(1,vector<long long>());long long n=v.back();v.pop_back();vector<vector<long long>> ret;vector<vector<long long>> tmp=__MAKE_MAT__(v);for(auto e:tmp)for(long long i=0;i<n;++i){ret.push_back(e);ret.back().push_back(i);}return ret;}//#include "../graph_tree/graph_template.hpp"#line 1 "cpplib/dsu/union_find.hpp"/*** @brief Union Find* @see https://ja.wikipedia.org/wiki/%E7%B4%A0%E9%9B%86%E5%90%88%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0*/class UF{public:vector<int> data;int sz;public:UF(int sz):sz(sz){data.resize(sz,-1);}bool unite(int x,int y){x=root(x);y=root(y);if(x==y)return 0;if(data[x]>data[y])swap(x,y);data[x]+=data[y];data[y]=x;sz--;return 1;}inline int root(int x){return data[x]<0?x:data[x]=root(data[x]);}inline bool same(int x, int y){return root(x)==root(y);}inline int size(){return sz;}inline int size(int x){return -data[root(x)];}};#line 5 "cpplib/math/mod_int.hpp"/*** @brief ModInt*/template<int MOD>struct mod_int {using mint=mod_int<MOD>;using u64 = std::uint_fast64_t;u64 a;constexpr mod_int(const long long x = 0)noexcept:a(x>=0?x%get_mod():get_mod()-(-x)%get_mod()){}constexpr u64 &value()noexcept{return a;}constexpr const u64 &value() const noexcept {return a;}constexpr mint operator+(const mint rhs)const noexcept{return mint(*this) += rhs;}constexpr mint operator-(const mint rhs)const noexcept{return mint(*this)-=rhs;}constexpr mint operator*(const mint rhs) const noexcept {return mint(*this) *= rhs;}constexpr mint operator/(const mint rhs) const noexcept {return mint(*this) /= rhs;}constexpr mint &operator+=(const mint rhs) noexcept {a += rhs.a;if (a >= get_mod())a -= get_mod();return *this;}constexpr mint &operator-=(const mint rhs) noexcept {if (a<rhs.a)a += get_mod();a -= rhs.a;return *this;}constexpr mint &operator*=(const mint rhs) noexcept {a = a * rhs.a % get_mod();return *this;}constexpr mint operator++(int) noexcept {a += 1;if (a >= get_mod())a -= get_mod();return *this;}constexpr mint operator--(int) noexcept {if (a<1)a += get_mod();a -= 1;return *this;}constexpr mint &operator/=(mint rhs) noexcept {u64 exp=get_mod()-2;while (exp) {if (exp % 2) {*this *= rhs;}rhs *= rhs;exp /= 2;}return *this;}constexpr bool operator==(mint x) noexcept {return a==x.a;}constexpr bool operator!=(mint x) noexcept {return a!=x.a;}constexpr bool operator<(mint x) noexcept {return a<x.a;}constexpr bool operator>(mint x) noexcept {return a>x.a;}constexpr bool operator<=(mint x) noexcept {return a<=x.a;}constexpr bool operator>=(mint x) noexcept {return a>=x.a;}constexpr static int root(){mint root = 2;while(root.pow((get_mod()-1)>>1).a==1)root++;return root.a;}constexpr mint pow(long long n)const{long long x=a;mint ret = 1;while(n>0) {if(n&1)(ret*=x);(x*=x)%=get_mod();n>>=1;}return ret;}constexpr mint inv(){return pow(get_mod()-2);}static std::vector<mint> fac;static std::vector<mint> ifac;static bool init;constexpr static int mx=10000001;void build()const{init=0;fac.resize(mx);ifac.resize(mx);fac[0]=1,ifac[0]=1;for(int i=1;i<mx;i++)fac[i]=fac[i-1]*i;ifac[mx-1]=fac[mx-1].inv();for(int i=mx-2;i>=0;i--)ifac[i]=ifac[i+1]*(i+1);}mint comb(long long b){if(init)build();if(a==0&&b==0)return 1;if((long long)a<b)return 0;return fac[a]*ifac[a-b]*ifac[b];}mint fact()const{if(init)build();return fac[a];}mint fact_inv()const{if(init)build();return ifac[a];}friend std::ostream& operator<<(std::ostream& lhs, const mint& rhs) noexcept {lhs << rhs.a;return lhs;}friend std::istream& operator>>(std::istream& lhs,mint& rhs) noexcept {lhs >> rhs.a;return lhs;}constexpr static u64 get_mod(){return MOD;}};template<int MOD>std::vector<mod_int<MOD>> mod_int<MOD>::fac;template<int MOD>std::vector<mod_int<MOD>> mod_int<MOD>::ifac;template<int MOD>bool mod_int<MOD>::init=1;#line 3 "cpplib/math/mod_int1000000007.hpp"using mint=mod_int<1'000'000'007>;/*** @brief ModInt(1'000'000'007)*/#line 3 "cpplib/string/trie.hpp"/*** @brief Trie木*/struct trie{struct node;using np=node*;struct node{int sz=0,sz2=0;np ch[10];node(){for(int i=0;i<10;i++)ch[i]=nullptr;}};np root=new node();void add(const std::string& s){np t=root;t->sz++;for(int i=0;i<(int)s.size();++i){if(!t->ch[s[i]-'0'])t->ch[s[i]-'0']=new node();t=t->ch[s[i]-'0'];t->sz++;}t->sz2=1;}string count(const std::string& s){np t=root;int last=0;for(int i=0;i<(int)s.size();++i){if(!t->ch[s[i]-'0'])t->ch[s[i]-'0']=new node();t=t->ch[s[i]-'0'];if(t->sz2)last=i;}return s.substr(0,last+1);}int count2(const std::string& s){np t=root;for(int i=0;i<(int)s.size();++i){if(!t->ch[s[i]-'0'])t->ch[s[i]-'0']=new node();t=t->ch[s[i]-'0'];if(!t->sz)return 0;}return t->sz2;}// int count_suffix(const std::string& s){// np t=root;// int res=0;// for(int i=0;i<(int)s.size();++i){// if(!t->ch[s[i]-'0'])t->ch[s[i]-'0']=new node();// t=t->ch[s[i]-'0'];// res+=t->sz2;// }// return res;// }};#line 5 "code.cpp"int main(){lint n;cin>>n;vec a(n);vec x(n),y(n);auto dist=[&](lint i,lint j){return sqrtl((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));};rep(i,n){cin>>x[i]>>y[i];}vector<vector<long double>> v(n,vector<long double>(n,0));vector<lint>used(n);vector<tuple<long double,lint,lint>>dp;rep(i,n)rep(j,i+1,n){dp.emplace_back(dist(i,j),i,j);}sort(all(dp));lint ans=0;for(auto [d,s,t]:dp){if(used[s]||used[t])continue;if(s==0){ans++;used[t]=1;}else{used[s]=used[t]=1;}}cout<<ans<<endl;}