【数学】B066_LQ_拯救阿拉德大陆(普通容理 / 进阶(写法疑惑))
一、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_拯救阿拉德大陆(普通容理 / 进阶(写法疑惑))相关推荐
- 拯救阿拉德大陆 (容斥原理)
拯救阿拉德大陆 描述 阿拉德大陆是冒险家们活动的主要区域,地下城与勇士的冒险故事也主要发生在这片广袤的土地- 阿拉德大陆的文明之光最初是由精灵和人类共同创造的,但是后来由于双方关系破裂,精灵逐渐从阿拉 ...
- uni-app的flex盒模型与布局进阶写法(高手勿进)
uni-app的flex盒模型与布局进阶写法(高手勿进) 官方文档 盒模型的进阶操作 flex布局 总结 官方文档 许多细节不多赘述,细枝末节还是看官方文档 盒模型 flex布局 盒模型的进阶操作 盒 ...
- Python3,异常进阶写法之retrying。
异常进阶写法 1.引言 2.异常进阶写法 2.1 普通写法 2.1.1 追加日志定位异常 2.1.2 增加重试机制 2.2 进阶写法 2.2.1 安装 2.2.1 装饰器retry使用 2.2.2 添 ...
- 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede
最近我们的cocos2d-x游戏项目已经进入了正式开发的阶段了,几个dev都辛苦码代码.cocos2d-x还是一套比较方便的api的,什么action啊.director啊.ccpoint啊都蛮便捷的 ...
- 面试让写一个“bind”函数,详解五层bind函数进阶写法,带你写出一个让面试官满意的 “bind” 函数
文章目录 手写bind函数 第一层 - 绑定在原型上的方法 第二层 - 改变this的指向 第三层 - 支持柯里化 第四层 - 考虑 new 的调用 第五层 - 保留函数原型 总结最终版bind函数 ...
- 信奥中的数学 数论篇 相关资料汇总(2022.07.07)
数论入门书籍推荐 数论入门书籍推荐_dllglvzhenfeng的博客-CSDN博客_数论入门应该看什么书 数学女孩系列书籍 数学女孩系列书籍_dllglvzhenfeng的博客-CSDN博客 信息学 ...
- 老是担心数学学不好?是因为你的数学老师不是爱因斯坦!
各位模友,大家好 我是小木 相信上学的时候,数学对于很多人来说,无疑是个坑!好不容易毕业了,好奇又好学的小表妹每次都能完美地引起小木的心酸历程. 就在小木一边回忆起自己的心酸历程的同时,不禁感叹,为什 ...
- 《算法竞赛进阶指南》数论篇
<算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSGS <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSG ...
- 组合数学 算法导论 具体数学 博弈论 计算机科学数学
组合数学[清华大学] https://www.bilibili.com/video/BV1sW411V7RU 15日掌握<具体数学>第1天学习直播实况记录(2019.5.27) https ...
最新文章
- STM32添加项目所需要的工程文件
- 职场上面你面临的竞争
- 职高学的计算机单招考试能换专业吗,高职单招可以随便选专业吗
- smarty二维foreach示例[顺代一维数组],再次加强版
- 1835 魔法猪学院
- 一文带你彻底了解大数据处理引擎Flink内存管理
- Spring中的bean是否是线程安全的
- 锂离子电池容量计量之库仑计法
- Python编写求100以内素数
- 软考架构设计师论文(微服务)
- Apple(苹果)忘记安全问题答案怎么办?
- Windows无法解压文件-potentially harmful
- rhino java api demo_用 Rhino 脚本化 Java
- 统计分析/PCA,PCoA,NMDS等的区别
- python 操作鼠标和键盘
- AirSim学习和踩坑记录(不定时更新)
- 基于am5718的【ARM-Linux开发】wayland和weston的介绍
- 欧盟砍伐森林法规和遵守情况 用Dimitra技术解决森林砍伐问题
- 整理几种List去重的方法
- 重采样、下采样、上采样三者之间的关系