結果
| 問題 |
No.546 オンリー・ワン
|
| コンテスト | |
| ユーザー |
hiyokko2
|
| 提出日時 | 2017-07-30 12:59:50 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 7 ms / 2,000 ms |
| コード長 | 1,060 bytes |
| コンパイル時間 | 1,403 ms |
| コンパイル使用メモリ | 161,016 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-10 22:32:04 |
| 合計ジャッジ時間 | 2,010 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 7 |
ソースコード
#include <bits/stdc++.h>
#define FOR(i,bg,ed) for(ll i=(bg);i<(ed);i++)
#define REP(i,n) FOR(i,0,n)
#define MOD 1000000007
#define int long long
using namespace std;
typedef long long ll;
typedef vector<vector<ll>> mat;
const int INF = 1e9;
int gcd(int a, int b)
{
if (b == 0) return a;
return gcd(b, a % b);
}
int lcm(int a, int b)
{
return a / gcd(a, b) * b;
}
//L以上、H以下の整数のうちCで割り切れる数の個数を返す
int divNum(int L, int H, int C)
{
return H/C - (L-1)/C;
}
int N, L, H;
int C[15];
signed main()
{
cin >> N >> L >> H;
REP(i,N) cin >> C[i];
int ans = 0;
REP(i,N) {
//ans += divNum(L, H, C[i]);
vector<int> CC;
REP(j,N) if (i != j) CC.push_back(C[j]);
REP(mask,1<<CC.size()) {
int lc = C[i];
int cnt = 0;
REP(j,CC.size()) if (mask & (1 << j)) lc = lcm(lc, CC[j]), cnt++;
if (cnt % 2 == 0) ans += divNum(L, H, lc);
else ans -= divNum(L, H, lc);
}
}
cout << ans << endl;
}
hiyokko2