07 2021 档案
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=3579 一些坑点。首先是如果说最后求得到的结果为0,那么在数学意义上这是正确的,0对于任何的确是最小的整数解,但实际意义正整数就并非如此了,如果为0,那么下一个最小解为最小公倍数。 一个技巧,先除再乘防止爆炸。
阅读全文
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=1573 n组线性同余方程求解,最后求出多少解。而最终的解的周期为最小公倍数,范围内的,需要这样算。如果最小超过,那么直接是0,如果无解为0,如果最小为0,那么直接为k个lcm,否则要加上自身的1,因为要求为正整数
阅读全文
摘要:http://poj.org/problem?id=2115 k位储存特点,一旦溢出,那么就到第二个循环开始返回0重新计数。问题实际转化成a+cx=b(mod 2^k)跑多少圈能够重合。因为是k位无符号,所以直接就是2^k次方,0~2^k-1。刚好覆盖模的范围 1 #include<iostream
阅读全文
摘要:http://poj.org/problem?id=2891 实际上就是一个一元线性同余方程组。按照合并的方式来解即可。 有一个注意点,调用函数是会慢的。 #include<iostream> #include<cstdio> #include<algorithm> using namespace
阅读全文
摘要:#include<iostream> #include<cstdio> using namespace std; typedef long long ll; const int maxn = 63; ll multi(ll a,ll b,ll mod_val)//实现a * b % mod_val的
阅读全文
摘要:http://poj.org/problem?id=3090 对于此题,观测点的数目,从小规模开始观察,可以得到每一个点,由一根无限长的绳子,绕着原点旋转,得到的第一个点。换另外一个思路,每一个观察到的点,都是子矩阵的一个边界点,也就是说枚举每一个子矩阵的点即可,而对于重合的点,则是已经出现的点,也
阅读全文
摘要:https://oj.shiyancang.cn/Problem/798.html #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod = 21252; ll a[4],m[4]; ll M
阅读全文
摘要:http://ybt.ssoier.cn:8088/problem_show.php?pid=1633 A^B 快速幂求结果,所有约数和,可以通过组合来进行得到。 技巧,通过递归得到1~n次的和.sum(n/2)*(1+?)这半,通过加自身和,调整后的自身以及补位,在log的时间内算出所有结果. 分
阅读全文
摘要:https://www.luogu.com.cn/problem/P1290 博弈论游戏,用到mod。 辗转相除法的过程,会构成n种状态。 到达最后一个状态就赢了。 对于一次过程如果div>1那么只要把该状态下的最后一个留给对方,自己始终是占据状态的初始位,那么一定是赢的。 第二种情况,如果div=
阅读全文
摘要:https://oj.shiyancang.cn/Problem/781.html 素数距离,数据范围21亿,如果用素数筛存,并且进行做的话,按照x/lnx计算会是一个非常恐怖的复杂度。确定要做什么,首先一定要筛选素数,然后一定要进行素数的比较。问题就在筛选素数这里,可以看到区间范围很小,可以从这里
阅读全文
摘要:https://oj.shiyancang.cn/Problem/304.html 首先数据范围不可能算出来的,那么就要看数的性质。 0是怎么来的首先我们知道,有一个0,就必然会有一个5和2. n!在这里面,只要是偶数必然会有2,则2的次数一定大于5的次数。 则只需要统计5的次数即可。这就是n!里面
阅读全文
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=2098 时间复杂度 #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N=2e4+520; bool st[N
阅读全文
摘要:Problem - 1004 (hdu.edu.cn) 扩展欧几里得解决线性同余方程。先得到gcd的解,再恢复原解,因为知道通解的一般形式,所以通过模来得到最小正整数解。另一个可以通过相减,或者一样的操作。一个增加,另一个一定减少。 #include<bits/stdc++.h> using nam
阅读全文
摘要:Problem - 1003 (hdu.edu.cn) n次求逆元,线性求逆元 要用long long,不然很容易炸 每次叠加,不停的取模 必须互素,必须为质数。 不足的不会出现0,而后面的则满足取模的意义 #include<bits/stdc++.h> using namespace std; c
阅读全文
摘要:同样求逆元的题目,费马的条件,首先要保证p为质数,然后保证a与p互素。 数据范围问题,要保证在数据范围内,所以要b先模上mod #include<bits/stdc++.h> using namespace std; const int mod=9973; int qmi(int a,int b)
阅读全文
摘要:求逆元板子题,费马小定理求逆元,快速幂,维护前缀积。 #include<bits/stdc++.h> using namespace std; //bool isprime(int x) //{ // if(x==1) return false; // if(x==2) return true; /
阅读全文
摘要:题目— 2的幂次方 (shiyancang.cn) 递归题 #include<bits/stdc++.h> using namespace std; int k; void f(int n,int step) { if(n==0) return; f(n/2,step+1); if(n%2==1)
阅读全文
摘要:题目—负二进制 (shiyancang.cn) 进制的实质在于对于进制数的选择,选择不满足的填入当前的位置,然后除掉,继续开始选择。但是对于本题,是负数,但是进制上的数字为正数,所以就要调整,借位,因为符号不同,所以借位就是增加,进位就是减去。还有循环进位 #include<bits/stdc++.
阅读全文
摘要:题目—传纸条 (shiyancang.cn) 算法(线性DP) O(n3)O(n3)首先考虑路径有交集该如何处理。可以发现交集中的格子一定在每条路径的相同步数处。因此可以让两个人同时从起点出发,每次同时走一步,这样路径中相交的格子一定在同一步内。 状态表示:f[k, i, j] 表示两个人同时走了k
阅读全文
摘要:题目—递归函数 (shiyancang.cn) 记忆化dfs,注意dp的限制范围 #include<bits/stdc++.h> using namespace std; const int N=52; typedef long long ll; ll dp[N][N][N]; ll a,b,c;
阅读全文
摘要:给定一个数组,将其所有子区间的和从小到大排序,求第k小的是多少。 输入第一行两个数n, k,表示数组的长度和k;第二行有n个数,第i个是a[i],表示给定的数组。 输出仅一个数,表示答案。 样例输入5 61 1 1 1 1 样例输出2 二分答案,逐一寻找即可,计算所有小于的,如果不行,那么就在另外一
阅读全文
摘要:题目—猴子选大王 (shiyancang.cn) 一、出队顺序Description有M个人,其编号分别为1-M。这M个人按顺序排成一个圈。现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人出列为止。 In
阅读全文
摘要:题目—神奇的幻方 (shiyancang.cn) 模拟就对了 因为每一个状态由前一个状态决定,所以只需要记录即可 #include<bits/stdc++.h> using namespace std; const int N=52; int k[N][N],n,pre1,pre2; int mai
阅读全文
摘要:题目—瑞士轮 (shiyancang.cn) 模拟题 #include<bits/stdc++.h> using namespace std; const int N=1e5+520; int n,r,q,res1=1,res2=1; struct grade { int total,num,abi
阅读全文
摘要:题目—螺旋矩阵 (shiyancang.cn) noip201403螺旋矩阵【普及组】数学算法 - 大本营 - 博客园 (cnblogs.com) 以下为搬运代码。一个为算圈数,另外一个是数学方法 思路如下: 1.输入n>>a>>b; 2.用一个循环缩小范围求出a,b所示的数所在的圈数q; 3.再一
阅读全文
摘要:题目—乘二加一 (shiyancang.cn) 递归写法 #include <bits/stdc++.h> using namespace std; string f(int n) { if (n == 1) return "1"; return n & 1 ? "(" + f((n - 1) >>
阅读全文
摘要:题目—斜线输出(1) (shiyancang.cn) 在同一斜线上的满足方程。坐标关系计算即可。 #include<bits/stdc++.h> using namespace std; const int N=52; int n; int a[N][N]; int main() { scanf("
阅读全文
摘要:题目—摆动序列 (shiyancang.cn) 直接分成两部分,插入即可。只有一个地方不对,那就是符号。两个大的放一个小的,两个小的放一个大的。那么每次的大的放最大的,每次的小的放其次小的,用完就不用考虑了,直接考虑下一个即可,而对于后面的,前面的一个是满足最小的。 #include<bits/st
阅读全文
摘要:题目—图书管理员 (shiyancang.cn) 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。 如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小LL刚刚当上图书馆的管理员,
阅读全文
摘要:题目—超级百钱百鸡 (shiyancang.cn) 百钱百鸡的加强版 百钱百鸡的话,因为是有范围,所以挨个挨个尝试即可,确定两个,即可确定第三个。 超级百钱百鸡,通过题目的描述,最后可以得到一个二元的式子,然后就是求解。同样的枚举,对于每一个可能的系数 枚举,如果满足,那么即可成立。 #includ
阅读全文
摘要:题目—三角形游戏 (shiyancang.cn) 对于任意的一个数字,把他拆分为n个数字,使得其逐层和为该数字. 首先n很小,所以很可能是搜索。DFS,n回选择。 #include<bits/stdc++.h> using namespace std; const int N=20; bool fl
阅读全文