清北学堂—2020.3NOIP数学精讲营—Day 1 morning 重点笔记
qbxt Day 1 morning 重点笔记
——2020.3.8 济南 主讲:钟皓曦
1
正数%负数==正数
负数%正数==负数
负数%负数==负数
a%b的答案的符号取决于a的符号。
2
快速幂:给定x,y,p,求xy%p,0<=x,y,p<=109
常规,(不够快):
//O(i)算法,非快速幂
int ans=1;
for(int i=1;i<=y;i++){
ans=(long long)ans*x%p;
}
int ans=1;
for(int i=1;i<=y;i++){
ans=(1ll*ans)*x%p;
//1ll指long long下的1,可以将int ans转换为long long ans
}
int ans=1;
for(int i=1;i<=y;i++){
ans=(0ll+ans)*x%p;
}
//10^8可以在1s中运行完,而这种代码在最坏情况下为10^9
快速幂:
思想:大问题化小问题
\]
//快速幂_递归
inline int quick_pow(int x,int y,int p){
if(y==0) return 1; //x^0==1
int ans=quick_pow(x,y>>1,p);
//y>>1==y/2;
ans=1ll*ans*ans%p;
if(y%2==1) z=1ll*ans*x%p;
return ans;
}
3
最大公因数,最小公倍数
gcd(a,b):找到一个最大的g,使g|a,g|b。
lcm(a,b):找到一个最小的l,使a|l,b|l。
\]
4
高精度
数的存储:
struct Edge{
int n,z[2333];
//z[1]个位,z[2]十位,以此类推
//n表示有n位
Edge{
n=1;
memset(a,0,sizeof(z));
}
inline void init(){ //读入高精度整数
scanf("%s",s+1);
int len=strlen(s+1);
reverse(s+1,s+len+1); //把给定区间进行反转
n=len;
for(int i=1;i<=n;i++){
z[i]=s[i]-'0';
}
}
inline void print(){ //输出高精度整数
for(int i=n;i>=1;i--) printf("%d",z[i]);
}
};
计算a是否小于b
bool operator<(const Edge &a,const Edge &b){
//operater< 指重载小于运算符
//为了计算a是否小于b
if(a.n<b.n) return a.n<b.n;
for(int i=a.n;i>=1;i--){
if(a.z[i]!=b.z[i]) return a.z[i]<b.z[i];
}
return false;
}
计算a小于等于b
bool operator<=(const Edge &a,const Edge &b){
if(a.n<b.n) return a.n<b.n;
for(int i=a.n;i>=1;i--){
if(a.z[i]!=b.z[i]) return a.z[i]<b,z[i];
}
return true;
}
高精度加法
Edge operator+(const Edge &a,const Edge &b){
Edge c;
c.n=max(a.n,b.n);
for(int i=1;i<=c.n;i++) c.z[i]=a.z[i]+b.z[i];
for(int i=1;i<=c.n;i++){
c.z[i+1]+=c.z[i]/10;
c.z[i]=c.z[i]%10;
}
if(c.z[n+1]!=0) c.n++;
return c;
}
高精度乘法
Edge operator*(const Edge &a,const Edge &b){
Edge c;
c.n=a.n+b.n;
for(int i=1;i<=a.n;i++){
for(int j=1;j<=b.n;j++){
c.z[i+j-1]+=a.z[i]*b.z[j];
}
}
for(int i=1;i<=c.n;i++){
c.z[i+1]+=c.z[i]/10;
c.z[i]=c.z[i]%10;
}
while(c.n!=1&&c.z[c.n]==0) c.n--;
return c;
}
luogu:
1226,1143,1017
清北学堂—2020.3NOIP数学精讲营—Day 1 morning 重点笔记的更多相关文章
- 清北学堂—2020.1提高储备营—Day 4 afternoon(动态规划初步(一))
qbxt Day 4 afternoon --2020.1.20 济南 主讲:顾霆枫 目录一览 1.动态规划初步 2.记忆化搜索 3.递推式动态规划 4.记忆话搜索与递推式动态规划的转化 5.状态转移 ...
- 清北学堂—2020.1提高储备营—Day 3(图论初步(一))
qbxt Day 3 --2020.1.19 济南 主讲:李奥 目录一览 1.图论(图.图的存储方式.最小生成树的定义) 总知识点:图论 前言:众所周知,图论是一个非常重要的部分,而这次集训也可以算从 ...
- 清北学堂 2020 国庆J2考前综合强化 Day5
目录 1. 题目 T1 a 题目描述 Sol T2 b 题目描述 Sol T3 c 题目描述 Sol T4 d 题目描述 Sol 2. 算法 - 贪心 & 数学 1. 贪心 2. 数学 2.1 ...
- 清北学堂—2020.1提高储备营—Day 4 morning(数论)
qbxt Day 4 morning --2020.1.20 济南 主讲:李奥 目录一览 1.一些符号与基本知识 2.拓展欧几里得,逆元与欧拉定理 3.线性筛法与积性函数(非重点) 总知识点:数论 一 ...
- 清北学堂—2020.1提高储备营—Day 3(图论初步(二))
qbxt Day 3 --2020.1.19 济南 主讲:李奥 目录一览 1.图论(kruskal算法,最短路径算法,拓扑排序) 总知识点:图论 一.kruskal算法 1.目的:求图的最小生成树 2 ...
- 清北学堂—2020.1提高储备营—Day 2 afternoon(线段树、树状数组)
qbxt Day 2 afternoon --2020.1.18 济南 主讲:李佳实 目录一览 1.线段树 2.二叉搜索树(略过) 3.树状数组 总知识点:基础数据结构(本人初学感觉好难) 一.线段树 ...
- 清北学堂—2020.1提高储备营—Day 1 morning(模拟、枚举、搜索)
qbxt Day 1 morning --2020.1.17 济南 主讲:李佳实 目录一览 1.模拟和枚举 2.基础搜索算法(DFS.BFS.记忆化搜索)以及进阶搜索算法(纯靠自学) 总知识点:基础算 ...
- 清北学堂—2020.1提高储备营—Day 2 morning(并查集、堆)
qbxt Day 2 morning --2020.1.18 济南 主讲:李佳实 目录一览 1.并查集 2.堆 总知识点:基础数据结构 一.并查集 1.描述:并查集是一类十分常用的数据类型,它有着十分 ...
- 清北学堂—2020.1提高储备营—Day 1 afternoon(二分、分治、贪心)
qbxt Day 1 afternoon --2020.1.17 济南 主讲:李佳实 目录一览 1.二分法 2.分治 3.贪心 总知识点:基础算法 一.二分法 (1)算法分析:二分法是一种暴力枚举的优 ...
随机推荐
- 正则表达式 regex
正则表达式存在于String api下的matches方法 常用正常表达式: 字符 x 字符 x \\ 反斜线字符 字符类 [abc] a.b 或 c(简单类) [^abc] 任何字符,除了 a.b ...
- python常用算数运算符、比较运算符、位运算符与逻辑运算符
编辑时间: 2019-09-04,22:58:49 算数运算符 '+'.'-'.'*'.'/' :加.减.乘.除 '**':指数运算, ‘//’:整除, ‘%‘:求余数 num_1 = 15; num ...
- 关于连接内部服务器以及redis缓存基本操作
1.linux命令行远程连接内部服务器 ssh -p 6637 mndevops@172.18.11.183 //建立连接命令 端口号和用户名+ip 输入密码 ./redis-cli 进入redis数 ...
- D. Minimax Problem Codeforces 1288D binary_search+二进制
题目大意:n*m的矩阵中,找到两行数,可以形成两个一维数组,数组1的位置i和数组2的位置i去最大构成新数组b的元素b[i],最终目的要使数组b中最小的数尽可能的大 题解: m的范围是(1,8),比较小 ...
- 如果这篇文章说不清epoll的本质,那就过来掐死我吧!
转载自:https://www.toutiao.com/i6683264188661367309/ 目录 一.从网卡接收数据说起 二.如何知道接收了数据? 三.进程阻塞为什么不占用cpu资源? 四.内 ...
- C++11<functional>深度剖析
自C++11以来,C++标准每3年修订一次.C++14/17都可以说是更完整的C++11:即将到来的C++20也已经特性完整了. C++11已经有好几年了,它的年龄比我接触C++的时间要长10倍不止吧 ...
- 接触 Jmeter
Apache JMeter是 Apache组织开发的基于 Java的开源压力测试工具.接口以及自动化测试. JMeter 可以进行参数化测试,实现自动化脚本与测试数据分离,能够对应用程序做功能/回归测 ...
- Youtube推荐算法的前世今生
第一阶段,基于User-Video图游历算法,2008年[1]. 在这个阶段,YouTube认为应该给用户推荐曾经观看过视频的同类视频,或者说拥有同一标签的视频.然而此时,YouTube的视频已是数千 ...
- Python flask 构建可扩展的restful ap
Flask-RESTful是flask的扩展,增加了对快速构建REST API的支持. Flask-RESTful通过最少的设置鼓励最佳的实践. pip install flask-restfulFl ...
- (第二篇)shell的简单了解
Shell (类似开发工具) Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程 ...