700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 拯救阿拉德大陆 (容斥原理)

拯救阿拉德大陆 (容斥原理)

时间:2018-12-20 23:17:53

相关推荐

拯救阿拉德大陆 (容斥原理)

拯救阿拉德大陆

描述

阿拉德大陆是冒险家们活动的主要区域,地下城与勇士的冒险故事也主要发生在这片广袤的土地…

阿拉德大陆的文明之光最初是由精灵和人类共同创造的,但是后来由于双方关系破裂,精灵逐渐从阿拉德大陆上…

目前阿拉德大陆上主要分布着以下势力:德洛斯帝国、贝尔玛尔公国、虛祖、班图、暗精灵王国等。

德洛斯帝国的前身是强大的佩鲁斯帝国。当年,因为混沌之神奥兹玛的报复,帝国在血之诅咒蔓延下灭亡了。经过长时间的累积,帝国的后裔们重新建立起新的军事强国一 德洛斯帝国,并且继承了佩鲁斯的野心,意图再次统一整片大陆。

贝尔玛尔公国距今已有500多年的历史,那里幅员辽阔、土地肥沃。公国现任女王为斯卡迪,但是实际上权利都掌握在33位议员手里。目前,公国正被被德洛斯帝国占领中。

拥有超过2000年历史的文明古国虚祖,虽然土地面积不大,却是个不容小觑的国家;那里几乎人人习武,而且素喃工坊制作的武器也是天下一绝。

班图族是居住在斯特鲁山脉北部边界所有部族的总称。如今它已被分裂成几个小部族,分别是沃克族、库尼族和图卢斯族。这些部族间的关系虽不和睦,但是每隔30年,冰龙斯卡萨苏醒后,各部族间仍是会齐心协力地翻越山岭。

与其他势力不同,暗精灵王国是建在地底洞穴的国家。暗精灵们因为天生的戒备心,所以国家实施的是与世隔绝的政策。但是由于一次瘟疫的横行, 暗精灵与邻国贝尔玛尔公国关系恶化,战争一触即发。

现在的阿拉德大陆混战不断、瘟疫横行,可以说是处于一个动荡不安、满目疮痍的黑暗时期。生活在水深火热的人们急切地期盼着英雄的到来,他们希望真正的勇士能够赶走灾难,为阿拉德大陆带来久违的和平…

此时一批勇士也随之而来,但其能力也是参差不齐,我们需要挑选出最优秀的勇士来守护这片大陆。每位勇士都有属于自己的编号,而我们现在有四张卡片里面分别标记了一个号码, 当勇士的编号为其中某-张卡片中号码的倍数时说明该勇士是优秀的。

目前有n名勇士(编号1−n)并且告诉你卡片内的号码,请你计算出能挑选出多少位勇士

输入

第一个行读入一个正整数n

第二行读入四个正整数a,b,c,d分别表示四张卡片内的号码

输出

输出挑选出来的勇士个数

样例

输入复制

10

2 3 5 7

输出复制

9

提示

数据规模

对于%100的数据,1<=n<=1e18,1<=a,b,c,d<=1e7

思路:本题的问题在于数据规模过大,我们要找出n以内是a,b,c,d的倍数的且不重复的数有多少个,所以采用容斥原理解决。

代码:

#include <stdio.h>long long a,b,c,d,n,ans,Bab,Bac,Bad,Bbc,Bbd,Bcd,Babc,Babd,Bacd,Bbcd,Babcd;long long gcd(long long x,long long y){return y==0?x:gcd(y,x%y);}long long lcm(long long x,long long y){return x*y/gcd(x,y);}int main(){scanf("%lld%lld%lld%lld%lld",&n,&a,&b,&c,&d);Bab=lcm(a,b);Bac=lcm(a,c);Bad=lcm(a,d);Bbc=lcm(b,c);Bbd=lcm(b,d);Bcd=lcm(c,d);Babc=lcm(a,Bbc);Babd=lcm(a,Bbd);Bacd=lcm(a,Bcd);Bbcd=lcm(b,Bcd);Babcd=lcm(Bab,Bcd);ans=n/a+n/b+n/c+n/d-n/Bac-n/Bab-n/Bad-n/Bbc-n/Bbd-n/Bcd+n/Babc+n/Babd+n/Bacd+n/Bbcd-n/Babcd;printf("%lld",ans);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。