結果
問題 | No.546 オンリー・ワン |
ユーザー | settsud |
提出日時 | 2017-07-14 23:34:36 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 35 ms / 2,000 ms |
コード長 | 1,261 bytes |
コンパイル時間 | 1,602 ms |
コンパイル使用メモリ | 163,628 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-07 23:37:42 |
合計ジャッジ時間 | 2,631 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 3 ms
5,248 KB |
testcase_04 | AC | 3 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 2 ms
5,248 KB |
testcase_07 | AC | 4 ms
5,248 KB |
testcase_08 | AC | 35 ms
5,248 KB |
testcase_09 | AC | 35 ms
5,248 KB |
testcase_10 | AC | 35 ms
5,248 KB |
ソースコード
#include "bits/stdc++.h" using namespace std; long long int gcd(long long int l, long long int r) { assert(l > 0 && r > 0); if (l > r)return gcd(r, l); else { const long long int num = r%l; if (num) { return gcd(l, num); } else { return l; } } } long long int lca(long long int l, long long int r) { return l / gcd(l, r)*r; } int solve(vector<long long int>cs, long long int K) { long long int sum = 0; vector<long long int>memo(1 << cs.size()); for (int i = 0; i < cs.size(); ++i) { memo[(1 << i)] = 1; } for (int i = 0; i < (1 << cs.size()); ++i) { bitset<10>bs(i); long long int alca = 1; for (int j = 0; j < cs.size(); ++j) { if (bs[j]) { alca = lca(alca, cs[j]); if (alca > 1e9)break; } } for (int l = 0; l < (1<< cs.size()); ++l) { bitset<10>as(l); bool flag = true; if (l == i)continue; for (int j = 0; j < cs.size(); ++j) { if (bs[j] && !as[j])flag = false; } if (flag) { memo[l]-=memo[i]; } } sum +=memo[i]*( K / alca); } return sum; } int main() { int N, L, H; cin >> N >> L >> H; vector<long long int>cs; for (int i = 0; i < N; ++i) { int c; cin >> c; cs.emplace_back(c); } int ans = solve(cs, H) - solve(cs, L - 1); cout << ans << endl; return 0; }