一、Problem

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

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

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

德洛斯帝国的前身是强大的佩鲁斯帝国。当年,因为混沌之神奥兹玛的报复,帝国在血之诅咒蔓延下灭亡了。经过长时间的累积,帝国的后裔们重新建立起新的军事强国一 德洛斯帝国,并且继承了佩鲁斯的野心,意图再次统一整片大陆。
贝尔玛尔公国距今已有500500多年的历史,那里幅员辽阔、土地肥沃。公国现任女王为斯卡迪,但是实际上权利都掌握在33位议员手里。目前,公国正被被德洛斯帝国占领中。

拥有超过20002000年历史的文明古国虚祖,虽然土地面积不大,却是个不容小觑的国家;那里几乎人人习武,而且素喃工坊制作的武器也是天下一绝。
班图族是居住在斯特鲁山脉北部边界所有部族的总称。如今它已被分裂成几个小部族,分别是沃克族、库尼族和图卢斯族。这些部族间的关系虽不和睦,但是每隔3030年,冰龙斯卡萨苏醒后,各部族间仍是会齐心协力地翻越山岭。
与其他势力不同,暗精灵王国是建在地底洞穴的国家。暗精灵们因为天生的戒备心,所以国家实施的是与世隔绝的政策。但是由于一次瘟疫的横行, 暗精灵与邻国贝尔玛尔公国关系恶化,战争一触即发。

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

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

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

10
2 3 5 79

二、Solution

回忆杀:读完这几段文字,似乎让我想起了我的小学时代的 ”青春”,hhh,那时候怀着不知名的情怀,在阿拉德大陆上奋战,那时候我很喜欢玩 pk,而且钟爱酒吧这个场景;经过自己努力,也打上了至尊 1(很久以前啦…),在场上斗智斗勇,狂抓细节,有收获胜利的喜悦,也有品尝被 KO 的苦涩… 我很欣慰可以找到自己喜欢玩的游戏,我也为之努力过,嘻嘻。

最暴力的解法也很简单,判断是否可以被 a/b/c/d 的整除即可…但我不想这样做:

方法一:容理

数据溢出 3/20… :一开始是 n 爆 int 了,后来改为 long,score++…

这还是不能直接用乘法来做了…

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{static class Solution {void init() {Scanner sc = new Scanner(new BufferedInputStream(System.in));int m, p[];long n;long res = 0;n = sc.nextLong();m = 4;p = new int[m];for (int i = 0; i < m; i++) p[i] = sc.nextInt();int tot = 1 << m;for (int i = 1; i < tot; i++) {long pro = 1, cnt = 1;for (int j = 0; j < m; j++) {if ((i & (1 << j)) > 0) {pro *= p[j];if (pro > n) {pro = -1;break;}cnt++;}}if (pro != -1) {if (cnt % 2 == 0)    res += n / pro;else                res -= n / pro;                   }}System.out.println(res);}}public static void main(String[] args) throws IOException {  Solution s = new Solution();s.init();}
}

本质不变,当数据比较大时,我们需要用到容理的另一种写法。

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{static class Solution {long gcd(long a, long b) {return b == 0 ? a : gcd(b, a%b);}void init() {Scanner sc = new Scanner(new BufferedInputStream(System.in));int m, p[];long n;long res = 0;n = sc.nextLong();m = 4;p = new int[m];for (int i = 0; i < m; i++) p[i] = sc.nextInt();int tot = 1 << m;for (int i = 1; i < 1 << m; i++) {long pro = 1, cnt = 1;for (int j = 0; j < m; j++) {if ((i & (1 << j)) > 0) {long g = gcd(pro, (long) p[j]);pro = pro / g * p[j];if (pro > n) {pro = -1;break;}cnt++;}}if (pro != -1) {if (cnt % 2 == 0)     res += n / pro;else                res -= n / pro;                   }}System.out.println(res);}}public static void main(String[] args) throws IOException {  Solution s = new Solution();s.init();}
}

复杂度分析

  • 时间复杂度:O(2m×m)O(2^m × m)O(2m×m),
  • 空间复杂度:O(m)O(m)O(m),

【数学】B066_LQ_拯救阿拉德大陆(普通容理 / 进阶(写法疑惑))相关推荐

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

    拯救阿拉德大陆 描述 阿拉德大陆是冒险家们活动的主要区域,地下城与勇士的冒险故事也主要发生在这片广袤的土地- 阿拉德大陆的文明之光最初是由精灵和人类共同创造的,但是后来由于双方关系破裂,精灵逐渐从阿拉 ...

  2. uni-app的flex盒模型与布局进阶写法(高手勿进)

    uni-app的flex盒模型与布局进阶写法(高手勿进) 官方文档 盒模型的进阶操作 flex布局 总结 官方文档 许多细节不多赘述,细枝末节还是看官方文档 盒模型 flex布局 盒模型的进阶操作 盒 ...

  3. Python3,异常进阶写法之retrying。

    异常进阶写法 1.引言 2.异常进阶写法 2.1 普通写法 2.1.1 追加日志定位异常 2.1.2 增加重试机制 2.2 进阶写法 2.2.1 安装 2.2.1 装饰器retry使用 2.2.2 添 ...

  4. 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede

    最近我们的cocos2d-x游戏项目已经进入了正式开发的阶段了,几个dev都辛苦码代码.cocos2d-x还是一套比较方便的api的,什么action啊.director啊.ccpoint啊都蛮便捷的 ...

  5. 面试让写一个“bind”函数,详解五层bind函数进阶写法,带你写出一个让面试官满意的 “bind” 函数

    文章目录 手写bind函数 第一层 - 绑定在原型上的方法 第二层 - 改变this的指向 第三层 - 支持柯里化 第四层 - 考虑 new 的调用 第五层 - 保留函数原型 总结最终版bind函数 ...

  6. 信奥中的数学 数论篇 相关资料汇总(2022.07.07)

    数论入门书籍推荐 数论入门书籍推荐_dllglvzhenfeng的博客-CSDN博客_数论入门应该看什么书 数学女孩系列书籍 数学女孩系列书籍_dllglvzhenfeng的博客-CSDN博客 信息学 ...

  7. 老是担心数学学不好?是因为你的数学老师不是爱因斯坦!

    各位模友,大家好 我是小木 相信上学的时候,数学对于很多人来说,无疑是个坑!好不容易毕业了,好奇又好学的小表妹每次都能完美地引起小木的心酸历程. 就在小木一边回忆起自己的心酸历程的同时,不禁感叹,为什 ...

  8. 《算法竞赛进阶指南》数论篇

    <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSGS <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSG ...

  9. 组合数学 算法导论 具体数学 博弈论 计算机科学数学

    组合数学[清华大学] https://www.bilibili.com/video/BV1sW411V7RU 15日掌握<具体数学>第1天学习直播实况记录(2019.5.27) https ...

最新文章

  1. STM32添加项目所需要的工程文件
  2. 职场上面你面临的竞争
  3. 职高学的计算机单招考试能换专业吗,高职单招可以随便选专业吗
  4. smarty二维foreach示例[顺代一维数组],再次加强版
  5. 1835 魔法猪学院
  6. 一文带你彻底了解大数据处理引擎Flink内存管理
  7. Spring中的bean是否是线程安全的
  8. 锂离子电池容量计量之库仑计法
  9. Python编写求100以内素数
  10. 软考架构设计师论文(微服务)
  11. Apple(苹果)忘记安全问题答案怎么办?
  12. Windows无法解压文件-potentially harmful
  13. rhino java api demo_用 Rhino 脚本化 Java
  14. 统计分析/PCA,PCoA,NMDS等的区别
  15. python 操作鼠标和键盘
  16. AirSim学习和踩坑记录(不定时更新)
  17. 基于am5718的【ARM-Linux开发】wayland和weston的介绍
  18. 欧盟砍伐森林法规和遵守情况 用Dimitra技术解决森林砍伐问题
  19. 整理几种List去重的方法
  20. 重采样、下采样、上采样三者之间的关系

热门文章

  1. HCNP——LSR报文、LSU报文及LSAck报文
  2. 感动世界的50首歌和他们背后的故事3
  3. linux下at24c02驱动程序,Linux下iic(i2c)读写AT24C02
  4. 【矿渣】【玩客云】玩客云驱动OLED屏幕
  5. 学习数据结构的意义和作用
  6. 【一文讲通】样本不均衡问题解决--上
  7. centos7设置基础软件仓库时出错
  8. db2 jdbc 连接池_【转】java jdbc连接db2
  9. 使用远程工具远程连接linux(xshell,xftp,xmanager,xrdp)
  10. 通讯测试工具和博图仿真机的连接教程