Skip to content

Commit 2e7b547

Browse files
author
NiazBinSiraj
committed
Inclusion-Exclusion Method Added
1 parent a0e6a01 commit 2e7b547

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

Inclusion-Exclusion.cpp

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
//LightOJ 1117-Helping Cicada
2+
#include <bits/stdc++.h>
3+
//#include "custom.h"
4+
using namespace std;
5+
#define MAX 1000000
6+
#define INF INT_MAX
7+
#define LL long long
8+
#define ULL unsigned LL
9+
#define EPS 0.00000001
10+
#define PI acos(-1.0)
11+
#define MOD 100000007LL
12+
#define pii pair<int,int>
13+
#define pll pair<LL,LL>
14+
#define ck(XX) cout<<XX<<endl
15+
#define Set(XX,PS) XX|(1<<PS)
16+
#define Reset(XX,PS) XX&(~(1<<PS))
17+
#define Toggle(XX,PS) (XX^(1<<PS))
18+
#define Check(XX,PS) (bool)(XX&(1<<PS))
19+
#define SORT(v) sort(v.begin(),v.end())
20+
#define REVERSE(V) reverse(v.begin(),v.end())
21+
#define Fin freopen("input.txt","r",stdin)
22+
#define Fout freopen("output.txt","w",stdout)
23+
#define VALID(X,Y,R,C) X>=0 && X<R && Y>=0 && Y<C
24+
#define SIZE(ARRAY) sizeof(ARRAY)/sizeof(ARRAY[0])
25+
#define MS(ARRAY,VALUE) memset(ARRAY,VALUE,sizeof(ARRAY))
26+
#define FAST ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
27+
#define RT printf("Run Time : %0.3lf seconds\n", clock()/(CLOCKS_PER_SEC*1.0))
28+
struct subset
29+
{
30+
ULL element;
31+
char sign;
32+
33+
subset() {};
34+
subset(ULL element_, char sign_) {element = element_; sign = sign_;}
35+
};
36+
37+
38+
ULL gcd(ULL a, ULL b)
39+
{
40+
if(b==0) return a;
41+
if(a%b == 0) return b;
42+
return gcd(b, a%b);
43+
}
44+
45+
ULL lcm(ULL a, ULL b)
46+
{
47+
return (a*b)/gcd(a,b);
48+
}
49+
50+
vector <subset> subsetA;
51+
void subsetGenerate(vector<ULL>v, ULL position, ULL element, ULL size, ULL noe)
52+
{
53+
if(position == size)
54+
{
55+
if(noe == 0) return;
56+
if(noe%2 == 0) subsetA.push_back(subset(element,'-'));
57+
else subsetA.push_back(subset(element,'+'));
58+
return;
59+
}
60+
61+
subsetGenerate(v, position+1, lcm(element,v[position]), size, noe+1);
62+
subsetGenerate(v, position+1, element, size, noe);
63+
64+
return;
65+
}
66+
67+
68+
69+
int main()
70+
{
71+
FAST;
72+
//Fin;
73+
//Fout;
74+
ULL tc, cn=0;
75+
cin >> tc;
76+
while(tc--)
77+
{
78+
subsetA.clear();
79+
ULL n,m;
80+
cin >>n>>m;
81+
82+
vector <ULL> setA;
83+
for(ULL i=0; i<m; i++) {ULL temp; cin>>temp; setA.push_back(temp);}
84+
subsetGenerate(setA,0,1,setA.size(),0);
85+
86+
ULL ans=0;
87+
for(ULL i=0; i<subsetA.size(); i++)
88+
{
89+
ULL temp = n/subsetA[i].element;
90+
if(subsetA[i].sign == '+') ans += temp;
91+
else ans -= temp;
92+
}
93+
94+
ans = n-ans;
95+
printf("Case %llu: %llu\n", ++cn, ans);
96+
}
97+
98+
return 0;
99+
}

0 commit comments

Comments
 (0)