結果
問題 | No.8024 等式 |
ユーザー |
|
提出日時 | 2020-06-02 21:54:37 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 3,341 bytes |
コンパイル時間 | 5,524 ms |
コンパイル使用メモリ | 204,136 KB |
最終ジャッジ日時 | 2025-01-10 20:39:31 |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 9 RE * 13 TLE * 1 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:129:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 129 | scanf("%d",&n); | ~~~~~^~~~~~~~~ main.cpp:130:23: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 130 | rep(i,n) scanf("%d",&a[i]); | ~~~~~^~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h>#define rep(i,n) for(int i=0;i<(n);i++)using namespace std;using lint=long long;inline int popcount(int x){x=((x>>1)&0x55555555)+(x&0x55555555);x=((x>>2)&0x33333333)+(x&0x33333333);x=((x>>4)+x)&0x0f0f0f0f;x+=(x>>8);x+=(x>>16);return x&0x3f;}template<class T> T gcd(const T& a,const T& b){ return b==0?a:gcd(b,a%b); }template<class T>class rational{T num,den;rational& reduce(){T g=gcd(num,den);if(g<-1) g*=-1;if(g>1) num/=g, den/=g;return *this;}public:rational(const T& num=0){ *this=num; }rational(const T& num,const T& den):num(num),den(den){if(den<0){this->num*=-1;this->den*=-1;}reduce();}const T& nume()const{ return num; }const T& deno()const{ return den; }rational& operator+=(const T& v){ num+=den*v; return reduce(); }rational& operator-=(const T& v){ num-=den*v; return reduce(); }rational& operator+=(const rational& r){T g=gcd(den,r.den);den/=g;num*=r.den/g;num+=den*r.num;den*=r.den;return reduce();}rational& operator-=(const rational& r){T g=gcd(den,r.den);den/=g;num*=r.den/g;num-=den*r.num;den*=r.den;return reduce();}rational& operator*=(const rational& r){T g1=gcd(num,r.den),g2=gcd(den,r.num);num/=g1; num*=r.num/g2;den/=g2; den*=r.den/g1;if(den<0) num*=-1, den*=-1;return reduce();}rational& operator/=(const rational& r){T g1=gcd(num,r.num),g2=gcd(den,r.den);num/=g1; num*=r.den/g2;den/=g2; den*=r.num/g1;if(den<0) num*=-1, den*=-1;return reduce();}rational operator+(const T& v)const{ return rational(*this)+=v; }rational operator-(const T& v)const{ return rational(*this)-=v; }rational operator+(const rational& r)const{ return rational(*this)+=r; }rational operator-(const rational& r)const{ return rational(*this)-=r; }rational operator*(const rational& r)const{ return rational(*this)*=r; }rational operator/(const rational& r)const{ return rational(*this)/=r; }bool operator< (const rational& r)const{ return num*r.den<r.num*den; }bool operator> (const rational& r)const{ return r<(*this); }bool operator<=(const rational& r)const{ return !(r<(*this)); }bool operator>=(const rational& r)const{ return !((*this)<r); }bool operator==(const rational& r)const{ return !((*this)<r) && !(r<(*this)); }bool operator!=(const rational& r)const{ return (*this)<r || r<(*this); }rational& operator=(const T& v){ num=v; den=1; return *this; }friend ostream& operator<<(ostream& os,const rational& r){ return os<<r.num<<'/'<<r.den; }friend rational abs(const rational& r){ return rational(abs(r.den),r.num); }};int n,a[7];bool vis[1<<7];set<rational<lint>> memo[1<<7];inline void add(int S,const rational<lint> x){rep(T,1<<n) if(vis[T] && (S&T)==0 && T!=0 && memo[T].count(x)) {puts("YES");exit(1);}memo[S].emplace(x);}void dfs(int S){if(vis[S]) return;vis[S]=true;if(S==0) return;rep(i,n) if(S==(1<<i)) {add(S,a[i]);return;}rep(T,1<<n) if((T&S)==T && T!=0 && T!=S) {dfs(T);dfs(S&~T);for(auto x:memo[T]) for(auto y:memo[S&~T]) {add(S,x+y);add(S,x-y);add(S,y-x);add(S,x*y);if(y!=0) add(S,x/y);if(x!=0) add(S,y/x);}}}int main(){scanf("%d",&n);rep(i,n) scanf("%d",&a[i]);rep(S,(1<<n)-1) dfs(S);puts("NO");return 0;}