数论
文章平均质量分 50
sxj
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
剑指 offer acwing 27 数值的整数次方 (快速幂)
题面题解坑点 1. 本题中 可能有负数 ,用快速幂需要转化成正数,最后再取倒数坑点 2. 当n等于负无穷时,取相反数会超出int范围。要用long long代码class Solution {public: double Power(double x, int n) { typedef long long LL; bool is_minus = n < 0; double res = 1; LL k = abs(LL(n)); whil原创 2021-03-17 12:03:24 · 100 阅读 · 0 评论 -
剑指 offer acwing 25 剪绳子 (数学)
题面题解这是一道经典的数学结论问题,先说结论,就是我们剪的长度只有2和3两种,而且2最多为2个,当绳子的长度模3余1时,绳子长度为2个2,其余都是3;模3余2时,有一段是2,其余都是3证明 :当一段 ai >=5 时,那么我们就可以拆分成 (ai-3) *3 = 3 *ai - 9 ,我们假设3 *ai -9 >ai ,那么 2 *ai > 9 -----> ai > 4.5 假设成立 ,现在每段长度都不大于5在看4的情况 ,对于4 ,原创 2021-03-17 11:00:33 · 111 阅读 · 0 评论 -
剑指 offer 斐波那契数列
题面题解递归+滚动变量仔细观察我们会发现,递推时我们只需要记录前两项的值即可,没有必要记录所有值,所以我们可以用滚动变量递推。时间复杂度还是 O(n),但空间复杂度变成了 O(1)。代码class Solution {public: int Fibonacci(int n) { int a=0,b=1; while(n--){ int c=a+b; a=b,b=c; }原创 2021-03-16 19:43:42 · 96 阅读 · 0 评论 -
codeforces 1485 C Floor and Mod (枚举+推导)
题面题意题解代码#include<bits/stdc++.h>using namespace std;typedef long long ll;int main() { int t; cin >> t; while (t--) { ll x, y; cin >> x >> y; ll res = 0; for (ll k = 1; k <= s原创 2021-02-17 12:22:54 · 86 阅读 · 0 评论 -
codeforces 1445 D Divide and Sum (组合数)
题面题意题解我们举例可以发现,每种可能通过排序相减之后相加,所得到的结果都是一样的,就是序列排序后,n个大的-n个小的和那么我们现在只需要算出有多少种可能就行了,对于2n个数,每次选取n个数到一个序列,剩下的自然就是另一个序列,那么就是从2n当中任意选n个,就是组合数看题中数据范围,n是1e5 ,直接用通过预处理逆元求组合数 O(nlogn)代码#include<bits/stdc++.h>using namespace std;typedef long lon原创 2021-02-05 13:08:27 · 193 阅读 · 0 评论 -
codeforces 1445 C Division (质因数分解)
题面题意t组样例,每组给定一个p,q 找到一个最大的x,满足 p%x==0 && x%q !=0题解对于p%q != 0 那么 x 最大就是 p对于p%q ==0 ,我们就可以将 x=p 变小,来满足条件,因为要满足条件1,所以x变小的只能是p的因子倍,要满足条件2,而且要最大,(q,p共有的因子)我们只需要将x的因子幂减少到q的因子幂少1,就是最大的答案3.举个例子,因为p%q ==0 所以 q有的质因子p都有 ,假设 q=40=23 * 5 , p=240 = 2原创 2021-02-05 12:53:31 · 171 阅读 · 0 评论 -
西南科技大学第十六届ACM程序设计竞赛暨绵阳市邀请赛 E 呼兰河传
题面题解思路很简单,但是易错点较多,赛事wa了10多发,心态有点炸题中要求最小公倍数最大,肯定是所有数的最小公倍数才会最大可以把所有数的因子求出来,然后进行乘积,注意优化,具体看代码代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+6;const int mod = 1e9+9;ll n;ll a[maxn];ll primes[max原创 2021-01-30 20:26:39 · 268 阅读 · 0 评论 -
codeforces 1475 E Advertising Agency (组合数)
题面题意t组样例,每组n个数,给定一个k,问选取k个数组成最大的值,有多少种组合方案思路E题比D题简单太多,一定要先看数据范围啊!!!!,数据范围很小,直接用递归求组合数就行,O(n2)题中让选取最大,肯定是从给定的数中从大到小选,如果是最大的选完,然后才选第二大的,只有这样才会出现多选的情况提前预处理出组合数,然后用map记录每个数字出现的次数(从大到小),然后遍历找到可以求组合数的地方即可代码#include<bits/stdc++.h>using names原创 2021-01-28 09:40:53 · 326 阅读 · 0 评论 -
codeforces 1459 C Row GCD
原题链接翻译思路辗转相除法的扩展性质 : gcd(x,y) =gcd(x,y-x)由性质我们可以化解表达式 :gcd(a1+bi,a2+bi,…,an+bi) = gcd(a1+bi,a2-a1,a3-a2,…,an-an-1)题中还有还有两大坑点,然后我就wa了两发,第一个要开long long ,第二个记得要提前先算出来gcd(a2-a1,a3-a2,…,an-an-1) 这样只用算一遍,不能计算每个b[j] 的时候都算一遍,这样会TLEAC代码#include<bit原创 2021-01-25 21:00:56 · 150 阅读 · 0 评论 -
usaco training 3.2 阶乘
原题链接思路(因式分解,同余)因为数据范围较大,阶乘直接计算会溢出。所以不能直接计算阶乘再输出右侧第一个非零数字。为什么不能对每次结果保留 1 位,2 位呢?因为 n 的范围是 1 ~ 1000,乘积的最右侧非零数字的有时候不止受 1 位影响。比如:24!=620448401733239439360000,最右侧非零数字为:6。24!=620448401733239439360000,最右侧非零数字为:6。25!=15511210043330985984000000。最右侧数字为4。不是6原创 2021-01-25 12:12:06 · 212 阅读 · 0 评论 -
2020 ICPC·小米邀请赛 决赛 Rikka with Composite Number
原题链接题意给定一个集合D{1,2,3,4,5,6,7,8,9},一个数C=0,执行操作 C=C10+d(集合D中的一个数,选中的概率相同),直到C是合数(除1和其本身,还有别的因子)停止,求一个值res,就是所有合数的概率操作次数模拟样例1:输入100000000 ,代表集合D{1},选1的概率是1 。第一步:c=010+1=1(不是合数);第二步:c=110+1=11(不是合数);第三步:c=1110+1=111(合数) 所以最终结果是11*1 *3 。3是操作次数,1是概率模拟样例2原创 2021-01-23 20:17:52 · 259 阅读 · 1 评论 -
codeforces 1474 B Different Divisors
原题链接题意给你一个整数d让你找出最小的整数aa满足的条件是1.至少有4个因子,2.a的任意两个因子之差最少为d思路1.数论简单题,用到了线性筛求素数2.我们观察样例,1肯定是选择的,最后一个因子肯定是a本身,然后中间两个是a的因子,我们可以发现,最好的情况这两个因子相乘等于a,这样才会使得a最小,为了保证因子之间的差值确定,那么这两个因子应该为素数3.确定了这些,我们只需要从小到大枚举两个素数,乘积就是aAC代码#include<bits/stdc++.h>usi原创 2021-01-20 17:38:54 · 327 阅读 · 0 评论 -
acwing 124 进制转化(短除法)
原题链接思路1.可以将a进制转化成10进制,然后再将10进制转化成b进制,需要高精度2.也可用短除法直接将a进制转化为b进制AC代码#include<bits/stdc++.h>using namespace std;int main() { int T; cin >> T; while (T--) { int a, b; string a_line, b_line; cin >原创 2021-01-14 10:17:38 · 545 阅读 · 0 评论 -
acwing ------1346回文平方(进制转换)
原题链接思路(进位制)1.将1–300的数字枚举,转换成b进制,判断是否为回文串,输出即可2.如何转换b进制:短除法3.判断回文串 : 双指针4.这道题偏基础,主要看代码的简便性AC代码#include<bits/stdc++.h>using namespace std;char get(int x) { if (x <= 9) return x + '0'; return x - 10 + 'A';}string base(原创 2021-01-13 22:30:39 · 139 阅读 · 0 评论 -
牛客练习赛75 A题 数论签到
原题链接思路1.这属于数论签到题,但是一上去就wa了一发,因为在算fn时进行了mod p 操作 ,改变了最终的结果2.这到题主要用到快速幂和费马小定理3.计算fn时肯定是要取模的,但是绝对不是模p,根据费马小定理推导:ac 同于 cc%p-1mod p4.最后快速幂模板即可5.最好都开long long ,因为有时候真的能坑死人AC代码#include<bits/stdc++.h>using namespace std;typedef long long ll;c原创 2021-01-03 09:25:56 · 170 阅读 · 1 评论 -
codeforces 1244 C 数论
原题链接洛谷翻译思路1.由题意知道,败一场不得分,对最后的结果没有影响,所以我们可以不考虑失败的场数,只考虑胜场和平长,最后拿n减就是败场的次数2.只需要输出一种符合题意的结果即可,我们可以这样想,尽可能的让胜场多,平场少,因为这样在相同的分数下可以使的比赛的场次最小,如果是平场多的话,有可能会超出n3.最后只需判断是否符合情况即可AC代码#include<bits/stdc++.h>using namespace std;long long n, p, a,原创 2020-12-21 19:28:06 · 186 阅读 · 0 评论 -
codeforces 1228 C 数论
原题链接Let’s introduce some definitions that will be needed later.Let prime(x) be the set of prime divisors of x. For example, prime(140)={2,5,7}, prime(169)={13}.Let g(x,p) be the maximum possible integer pk where k is an integer such that x is divisible原创 2020-12-21 18:43:02 · 170 阅读 · 0 评论