基础数学问题
van之风
这个作者很懒,什么都没留下…
展开
-
P1403 [AHOI2005]约数研究
这道题暴力会T掉,直接用数学方法吧. n/i表示 1—n中有多少个因子有i,一个for循环累加即可.#include <iostream>using namespace std; int main() { int n,sum=0; cin>>n; for(int i=1;i<=n;i++) { sum+=n/i; } cout&l..原创 2020-08-18 22:19:12 · 108 阅读 · 0 评论 -
P2660 zzc 种田
这道题比较容易,递归可以很快就做出来!不过要注意尽可能降低递归层数,否则容易爆栈。下面是 AC code:#include <iostream>using namespace std;typedef long long int ll;ll fun(ll x,ll y); int main() { ll x,y; cin>>x>>y; cout<<fun(x,y)<<end.原创 2020-08-16 18:59:21 · 135 阅读 · 0 评论 -
P2651 添加括号III
这道题其实很简单,我们只需要变行就可以啦.a1一定是分子,a2一定是分母 a1 /(a2/a3/a4/a5…an)化简可以得到a1a3a4a5an/a2我们只需要用 a1 a3 …an分别与a2求最大公约数gd 看看有没有那一次可以使得 a2/gd = =1如果某个ai(i= 1 3 4 5 6 … n)与a2的最大公约数是 gd 并且 a2/gd==1,那么可以断定,可以得到整数,即输出Yes,否则输出No下面是 AC代码~#include <iostream>using..原创 2020-08-16 17:07:34 · 134 阅读 · 0 评论 -
P1414 又是毕业季II
这道题很容易想到暴力的dfs :选择k个数以后,找出所有选出k 个数以后的最大值。但是,对于这道题的数据n<10000肯定会凉凉,我们只能另辟蹊径.我们可以这样思考:如果k个数都含有某个因素 x 那么x一定是他们的公约数,找到这个k个数的公共因素最大的x 就是这k个数的最大公约数.所以我们可以对每个同学的能力进行因素分解,开一个数组b[] ,就比如某个同学的能力值是12那么他的因素就是 1 2 3 4 6 12 对应的就是b[1]++ b[2]++ b[3]++ b[4]..原创 2020-08-15 16:52:28 · 192 阅读 · 0 评论 -
P4057 [Code+#1]晨跑
考察:最小公倍数…注意 开 long longAcode~#include <iostream>typedef long long int ll;using namespace std;ll lcm(ll a,ll b); int main() { ll a,b,c; cin>>a>>b>>c; ll res=1; res=lcm(a,b); r...原创 2020-08-11 17:51:23 · 157 阅读 · 0 评论 -
P1572 计算分数
这道题可以当做一个大的模拟题,难度应该是普及-,思路:用vector v1保存分子,vector v2保存分母 vector v3保存符号 (+ -)然后求出 分母的最小公倍数s v1分子乘以 s/v2对应的分母 然后 v1里根据v3的符号进行加加减减 最后得到res 再对res 与 s 求最大公约数 gd 然后分子分母同时除以 gd 就是最后结果了踩坑点:(1)分母为1 不用输出 /1 输出分母即可(2)求最大公约数要用他们的绝对值来求下面是Accode:#include &.原创 2020-08-11 17:32:04 · 271 阅读 · 0 评论 -
P1069 细胞分裂
这道题很容易想到质因数分解,满足题目条件可以装入试管的情况是m1的质因子是Si的质因子的子集,也就是说m1有的质因子Si一定要有,Si有的质因子m1 却不一定要有…对于样例112 13m1=2 m2=1, s1=3m1的质因子是2 s1的质因子是3 m1的质因子不是s1质因子的子集,所以无论怎么分裂都不会满足.对于样例2224 130 12m1=24 m2=1 s1=30,s2=12m1=2223s1=23*5对于s1, m1的质因子是s1的子集所以可以装瓶。那么最少需要分...原创 2020-08-11 11:34:31 · 479 阅读 · 0 评论 -
P1072 Hankson 的趣味题
emmm这道题看到题目首先要打一下草稿,首先暴力的算法可能是会T掉了,最开始我就是用的暴力的算法,T掉了5个点,还是得了50分(如果想不到好办法暴力就暴力吧)附上暴力代码~#include <iostream>using namespace std;int gcd(int a,int b);//a>=bint lcm(int a,int b); //a<=b int main() { int a0,a1,b0,b1; in..原创 2020-08-09 14:07:18 · 277 阅读 · 0 评论 -
P1029 最大公约数和最小公倍数问题
这道题蛮简单的,但是也需要一点预备知识,两个数的最小公倍数和最大公约数的乘积等于这两个数的乘积.证明·:x0 y0的最大公约数是A,最小公倍数是B,x1=x0/A,y1=y0/A那么x1 y1一定是互质的所以x1 * y1 * A=B展开一下就可以得到A*B=x0 * y0至于为什么x1y1A=B,可以去康一下最小公倍数的短除法的求法,一看就明白了.知道这个定理以后题目就很简单了,满足条件的两个数的乘积就是x0y0, 现在就开始枚举,一个数x的因子我们只需要枚举1----sqrt(x),..原创 2020-08-08 17:48:12 · 401 阅读 · 0 评论 -
P3383 【模板】线性筛素数
这道题就是是一个线性筛选 我们这里使用欧拉筛选…对于每一个合数,他被筛选出去一定是他的最小质因数乘以他的除了他自身的最大因子。这个就是原理.证明部分请看其他博主(证明好像挺难的,数学没学好的就没看了,记住结论就行) PS:在这种卡时间的题目,不必要的语句就别写了…时间卡的很紧的下面是AC代码:#include <iostream>#include <unordered_map>#include <cstring>using namespace std;#..原创 2020-08-06 18:54:25 · 263 阅读 · 1 评论 -
P2926 [USACO08DEC]Patting Heads S
这道题很容易会想到O(n ^ 2)的算法,但是这个肯定会超时,比如我。最后以55分草草收场,改进以后就有100分啦.是这样的,他不是让我们分别求每头牛手上的数字可以整除多少头其他牛上手的数字吗?O(n^2)的算法就是用每头牛分别去判断其他牛的数字是否可以整除…换成另外一钟更快的算法是这样的,首先我们记录每头牛手上的数字有多少个,比如我们在输入的时候 如果输入5就 让b[5]++ 输入的是6 就让b[6]++ 输入完毕以后每头牛手上的数字每个数字的个数都会记录了下来… int n,num=0; ..原创 2020-08-06 12:03:56 · 256 阅读 · 0 评论 -
P1246 编码
这道题用排列组合来做,但是很难想到.比如某一串字母 cgi他对应的数字是多少呢?,首先他绝对是大于3位以下的字母的数字。首先考虑一个字母: a =1 b=2 c=3 ,一位的情况是C(26,1)=26,再考虑两个字母的那就是C(26,2),在考虑三位的情况。三位的情况稍微复杂点,但是其实也不复杂。先固定第一位可以是a–b任意一个字母,如果第一个是a,那么就加上C(25,2),如果第一个是b,那就加上C(24,2),然后固定第一位c,再考虑第二位可以是d–f之间任意一个字母,如果第二个是d那就加上C(22,.原创 2020-08-03 23:57:24 · 240 阅读 · 0 评论 -
P2638 安全系统
这道题考察的是高中数学知识,排列组合,隔板法。还没有学过或者忘记了的小可爱去看一下百度词条哦~ 点击这里查看隔板法题目中有句话容易读错,每个储存区最多能存储存2个种类不同的信号.,是存储两个种类不同的信号,不是两个信号.对于本题而言换句话说就是任何一个存储区都可以存储无线个信号题目中还说了 存储区可以不用存储信号~问题转化为这个:有a个红球,b个白球.将这些白球和红球放到不同的盒子里面,问有多少种不同的分法,首先a个红球分配到n个盒子有多少种分法,假如说是x1,b个白球分配到n个盒子有多少种分法..原创 2020-05-26 20:27:23 · 353 阅读 · 0 评论 -
P3913 车的攻击
这道题的数据量有点对不上,其实N是没有10^9的.N最大不会超过10^6如果数据是10^9的话 那么unordered_map才是正解#include <iostream>#include <unordered_map>using namespace std;unordered_map<int ,int > r;unordered_map<int ,int > c;typedef long long int ll; int main(.原创 2020-05-24 10:51:07 · 178 阅读 · 0 评论 -
P2822 组合数问题
这道题本身倒是不难,但是卡时间卡的太严重了。对于t是10^4次方查找,我们递归将C(n,m)求出来,并用一个数组记忆化保存,然后对于每次查询,我们循环遍历就可以了~#include <iostream>#include <cstring>using namespace std;#define Max 2005typedef long long int ll;ll C[Max][Max];ll get_c(int n,int m); int main()...原创 2020-05-23 14:38:47 · 667 阅读 · 1 评论 -
P1866 编号
可能是DFS写多了,看到这种题直接暴搜,结果T掉了7个点…T7点代码:#include <iostream>#include <cstring>using namespace std;#define Max 1005int t[Max];bool flag[Max];int res=0;int n,num=0;void dfs(int i,int t[]); int main() { cin>>n; .原创 2020-05-22 12:28:46 · 501 阅读 · 0 评论 -
P1017 进制转换
这道题实际上是一道数学题~首先我们要清楚余数:15 / 4=3…315 / -4=-3…3-15 / 4= -3…-3-15/-4=3…-3开始我也不知道负数除以负数的余数是负数…奇怪的知识增加了~然后题目说了十进制数 ,第二个是负进制数的基础.十进制数可正可负 ,但是第二个负进制数一定是负数.所以我们求以前进制数的时候,余数都是正数对不对,但是这里可能会出现负数.例如上面的:一个负数除以一个正数或者负数的余数都等于负数.但是最后结果不能有负数怎么办呢?很简单,我们只需要让余数-除数..原创 2020-05-22 11:51:55 · 294 阅读 · 0 评论 -
P1100 高低位交换
很简单的模拟题~注意开long long int 下面是ACcode~#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef long long int ll;vector<int > t; int main() { ll n; cin>>n; int res.原创 2020-05-21 23:10:25 · 170 阅读 · 0 评论 -
P1469 找筷子
看到数据是10^7, 内存是4MB第一反应:复杂度肯定是0(n) ,用数组肯定会MLE这时候要用到异或^0和任何数异或都等于任何数,0^x=xx和x异或等于0 x^x=0我们只需要最开始设置 res=0,然后不停的与输入的x进行异或,最后得到的结果一定是那个单个筷子ACcode:#include <iostream>using namespace std;int main(){ ios::sync_with_stdio(false); int n..原创 2020-05-21 22:23:43 · 354 阅读 · 0 评论 -
P1143 进制转换
先转化为10进制,再转换为其他进制数:AC code:#include <iostream>#include <vector>using namespace std;vector<char > t;int main(){ int n,m,num,res=0; char c; cin>>n; string str; cin>>str; cin>>m; for(int i.原创 2020-05-21 10:46:06 · 285 阅读 · 0 评论