結果
| 問題 |
No.8024 等式
|
| コンテスト | |
| ユーザー |
ei1333333
|
| 提出日時 | 2017-08-16 01:37:13 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,720 bytes |
| コンパイル時間 | 2,093 ms |
| コンパイル使用メモリ | 166,616 KB |
| 実行使用メモリ | 8,704 KB |
| 最終ジャッジ日時 | 2024-10-13 11:11:18 |
| 合計ジャッジ時間 | 9,159 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 7 TLE * 1 -- * 15 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
class Fraction
{
private:
// Calculates the greates common divisor with
// Euclid's algorithm
// both arguments have to be positive
long long gcd(long long a, long long b)
{
while(a != b) {
if(a > b) {
a -= b;
} else {
b -= a;
}
}
return a;
}
public:
long long numerator, denominator;
Fraction()
{
numerator = 0;
denominator = 1;
}
Fraction(long long n, long long d)
{
if(d == 0) {
cerr << "Denominator may not be 0." << endl;
exit(0);
} else if(n == 0) {
numerator = 0;
denominator = 1;
} else {
int sign = 1;
if(n < 0) {
sign *= -1;
n *= -1;
}
if(d < 0) {
sign *= -1;
d *= -1;
}
long long tmp = gcd(n, d);
numerator = n / tmp * sign;
denominator = d / tmp;
}
}
operator int() { return (numerator) / denominator; }
operator float() { return ((float) numerator) / denominator; }
operator double() { return ((double) numerator) / denominator; }
};
Fraction operator+(const Fraction &lhs, const Fraction &rhs)
{
Fraction tmp(lhs.numerator * rhs.denominator
+ rhs.numerator * lhs.denominator,
lhs.denominator * rhs.denominator);
return tmp;
}
Fraction operator-(const Fraction &lhs, const Fraction &rhs)
{
Fraction tmp(lhs.numerator * rhs.denominator
- rhs.numerator * lhs.denominator,
lhs.denominator * rhs.denominator);
return tmp;
}
Fraction operator*(const Fraction &lhs, const Fraction &rhs)
{
Fraction tmp(lhs.numerator * rhs.numerator,
lhs.denominator * rhs.denominator);
return tmp;
}
Fraction operator/(const Fraction &lhs, const Fraction &rhs)
{
Fraction tmp(lhs.numerator * rhs.denominator,
lhs.denominator * rhs.numerator);
return tmp;
}
bool operator<(const Fraction &a, const Fraction &b)
{
Fraction c = a - b;
return ((double) c < 0);
}
int main()
{
set< Fraction > dp[1 << 7];
int N, A[7];
cin >> N;
for(int i = 0; i < N; i++) cin >> A[i];
for(int i = 0; i < N; i++) {
dp[1 << i].emplace(Fraction(A[i], 1));
}
for(int i = 0; i < (1 << N); i++) {
for(int j = 0; j < (1 << N); j++) {
if(i & j) continue;
for(auto &k : dp[i]) {
for(auto l : dp[j]) {
dp[i | j].emplace(k + l);
dp[i | j].emplace(k - l);
dp[i | j].emplace(k * l);
if((double) l != 0) dp[i | j].emplace(k / l);
if(dp[i | j].count(Fraction(0, 1))) {
cout << "YES" << endl;
return (0);
}
}
}
}
}
cout << "NO" << endl;
}
ei1333333