結果

問題 No.546 オンリー・ワン
ユーザー chocoruskchocorusk
提出日時 2018-10-10 01:14:54
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,047 bytes
コンパイル時間 836 ms
コンパイル使用メモリ 95,656 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-04-20 19:21:25
合計ジャッジ時間 1,748 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 AC 2 ms
5,376 KB
testcase_04 AC 2 ms
5,376 KB
testcase_05 AC 2 ms
5,376 KB
testcase_06 AC 2 ms
5,376 KB
testcase_07 AC 2 ms
5,376 KB
testcase_08 AC 2 ms
5,376 KB
testcase_09 AC 2 ms
5,376 KB
testcase_10 AC 2 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>
#include <complex>
#include <unordered_map>
#include <random>
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;
ll gcd(ll a, ll b){
	if(b==0) return a;
	return gcd(b, a%b);
}

int main()
{
	int n;
	ll l, h;
	cin>>n>>l>>h;
	ll c[10];
	for(int i=0; i<n; i++) cin>>c[i];
	int ct[1<<10];
	ct[0]=h-l+1;
	for(int i=1; i<(1<<n); i++){
		ll lcm=1;
		for(int j=0; j<n; j++){
			if(i&(1<<j)) lcm=c[j]/gcd(c[j], lcm)*lcm;
			if(lcm>h) break;
		}
		if(lcm>h){
			ct[i]=0;
		}else{
			ct[i]=h/lcm-(l-1)/lcm;
		}
	}
	ll ans=0;
	for(int i=0; i<n; i++){
		ll ans1=ct[1<<i];
		for(int j=1; j<(1<<n); j++){
			if((j&(1<<i))==0) continue;
			if(j==(1<<i)) continue;
			int d=0;
			for(int k=0; k<n; k++){
				if(j&(1<<k)) d++;
			}
			if(d%2==0) ans1-=ct[j];
			else ans1+=ct[j];
		}
		ans+=ans1;
	}
	cout<<ans<<endl;
	return 0;
}
0