第一天培训,讲的基本算法,东西很多。还有些数论,图论,数据结构and some small tricks

一.输入输出技巧

 1 //输入输出技巧
 2 /*
 3 scanf、printf:速度快,需要记忆不同数据类型的格式化字符串
 4 cin、cout:简单,在某些情况下较慢
 5 getchar:读入一个字符
 6 puts/gets/cin.getline(a,100)如果a是大小为100的字符数组/getline(cin,a)如果a是一个string:输出/输入一个字符串
 7 */
 8 #include<iostream>
 9 #include<cstdio>
10 #include<cstring>
11 #include<algorithm>
12 using namespace std;
13 int main()
14 {   int a,n,h,min;
15     char m[3];
16     // 1.题目中不清楚输入输出的数据数量,可以用scanf的返回值解决。
17     while(scanf("%d",&a)!=EOF)
18     {
19         n++;
20         //.....
21     }
22     // 2.cin读入字符串以空格、回车结束。scanf、getchar读入字符串不会舍弃回车。gets读入字符串以回车结束。
23     std::ios::sync_with_stdio(false);//cin可以关闭同步加速。
24
25     // 3.scanf的妙用。举个栗子。再输入一个时间的时候,往往用字符串读入再取出时间。但scanf可以直接取出时间。
26     scanf("%d:%d",&h,&min);//当在读入时必须遇到‘:’才会继续读入,读入的为两个整数,就是时间。
27 } 

二.数组的高级用法

 1 //基础数据结构——数组
 2 /*
 3 数组很常见,同时也是很多高级数据结构的基础
 4 数组也有很多妙用
 5
 6 基本:储存数据,做统计等
 7 扩展:部分和数组,差分数组
 8 */
 9 #include<iostream>
10 #include<cstdio>
11 #include<algorithm>
12 #include<cstring>
13 using namespace std;
14 int a[100];
15 int sum[100];//部分和(前缀和)数组 sum[i]表示 a[i]+a[2]+...+a[i] 的值
16 int diff[100];//差分数组
17 int sumd[100];//差分数组diff的部分和数组
18 int main()
19 {
20     int n;
21     scanf("%d",&n);
22     for(int i=1;i<=n;i++)
23     scanf("%d",&a[i]);
24
25     //sum :
26      sum[1]=a[1];
27      for(int i=2;i<=n;i++)
28      sum[i]=sum[i-1]+a[i];
29     //用途:方便计算区间 L~R 的值num
30     int L,R;
31     scanf("%d%d",&L,&R);
32     int num=sum[R]-sum[L-1];
33
34     //diff :
35      diff[1]=a[1];
36      for(int i=2;i<=n;i++)
37      diff[i]=a[i]-a[i-1];
38     //用途:差分数组适用于离线的区间修改问题
39     //常用结论:a[]的差分数组是diff[]  而diff[]的部分和数组是a[]
40 /*证明:sumd[i]=diff[1]+diff[2]+...+diff[i]
41                                                     sumd[i]=a[1]+a[2]-a[1]+a[3]-a[2]+...+a[i]-a[i-1]=a[i]*/
42 }

三.竞赛树

 1 //竞赛树
 2 /*
 3 针对添加元素的数量确定的情况
 4 使用多一倍的空间,换取代码实现上的方便
 5 关键操作:上滤
 6 一种很奇怪的数据结构..也不算奇怪总之做题时会有用处的。
 7 数据都储存在叶子节点,内部节点储存子节点的较大值。
 8 */
 9 #include<iostream>
10 using namespace std;
11 const int INF = 0x7fffffff/2;
12 const int MAXN = 5001;
13 struct tree{
14     int data[MAXN*2];
15     int n;
16     tree(int n)
17     {
18         this->n=n;
19         for(int i=1;i<=2*n-1;i++) data[i]=-INF;
20     }
21     void update(int pos, int value)
22     {
23         pos=pos+n-1;
24         data[pos]=value;
25         while(pos/=2) data[pos]=max(data[pos*2],data[pos*2+1]);
26     }
27     int top() { return data[1];}//返回最大值
28     int toppos()//返回最大值的位置
29     {
30         int pos=1;
31         while(pos<n)
32         {
33             if(data[pos]==data[pos*2]) pos=pos*2;
34             else pos=pos*2+1;
35         }
36         return pos-n+1;
37     }
38 };
39 int main()
40 {
41     //.....
42 } 

四.快速幂

 1 //数论——快速幂
 2 /*
 3 计算 k^p%m
 4 递归的版本(并不如位运算效率高),运算时采用乘法。
 5 其实可以改成加法,使用加法更不容易爆longlong.
 6 */
 7 #include<iostream>
 8 #include<cstdio>
 9 using namespace std;
10 int pow1(int k,int p,int m)
11 {
12     if(p == 0) return 1;
13     long long ans = pow1(k,p/2,m);
14     return p%2==1?(ans*ans*k)%m:(ans*ans)%m;
15 }
16 long long pow2(long long k,long long p,long long m)
17 {
18     if(p==0) return 1;
19     long long ans=pow2(k,p/2,m);
20     return p%2==1?(ans+k)%m:(ans+ans)%m;
21 }
22 int main()
23 {
24     long long k,p,m;
25     cin>>k>>p>>m;
26     cout<<k<<"^"<<p<<" mod "<<m<<"="<<pow2(k,p,m);
27     cout<<k<<"^"<<p<<" mod "<<m<<"="<<pow1(k,p,m);
28     return 0;
29 }

转载于:https://www.cnblogs.com/MisakaAzusa/p/8470127.html

学大伟业 Day 1 培训总结相关推荐

  1. 学大伟业 Day 6 培训总结

    今天接着昨天的继续讲数据结构 今天先是 分块 在统计问题中,尤其是序列问题,经常涉及到区间的操作,比如修改一段区间的元素,询问某个区间的元素的信息. 如果每次都对一整个区间的每一个元素进行操作的话,那 ...

  2. 学大伟业 Day 5 培训总结

    今天讲数据结构 先从mzx大佬的ppt摘抄一段: 数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合. 通常情况下,精心选择的数据结构可以带来更高的运行或 ...

  3. 学大伟业 Day 3 培训总结

    今天讲的字符串: 不多说,直接看题 一.表达式求值 题目大意: 输入一行一个表达式,计算其答案 表达式包含非负整数.加减乘除.括号 两种做法 ·栈 ·表达式树 这里更推荐表达式树,因为栈是先压进去,逆 ...

  4. 学大伟业 Day 2 培训总结

    一.dp 动态规划的本质 是一种思想.通过对原问题划分成子问题,寻找子问题之间的联系,通过求解子问题得出原问题的解.与贪心不同的是,动归是深谋远虑,考虑全局最优解:而贪心则目光短浅,只考虑局部最优解. ...

  5. 学大伟业 Day 4 培训总结

    今天讲的全是dp... 不多废话,先看一道经典的模板LIS(最长不下降子序列) 一.LIS 给定一个长度为N的数列,求最长上升子序列 例:1 7 2 8 3 4 答案:1 2 3 4 代码: 1 #i ...

  6. 学大伟业:学长是如何对待数学竞赛的

    如果你是下定决心要学数竞,真的很认真地做了决定,那么你的自学能力必须要过关,专注度一定要够强.当然,这里的专注度不是指40分钟过去了,才连一条几何辅助线,也不是说60分钟过去了,你才完成了一试的填空题 ...

  7. 学大伟业:在数学竞赛学习中,你属于哪种类型?

    学习数学竞赛,在其他人眼中是一种什么存在,你知道么? 你在学习数学竞赛中属于什么类型的,你自己知道么? 下面几种类型, 赶紧看看自己,中枪了没. 做题狂魔型 这类人的主要特征就是喜欢做题,简直到了一种 ...

  8. 学大伟业:如何利用课余时间学习物理竞赛,搞定自主招生?

    今天撇开能力超强的学生不谈,仅针对目标自主招生的学生,谨慎的给出一些物理竞赛的学习建议. 高一 高中物理竞赛中力学.电磁学模块占据了70%的考试内容,这两个模块也是最难的模块,热学.光学.近代物理内容 ...

  9. 学大伟业Day1解题报告

    学大伟业Day1解题报告 张炳琪 一.   时间分配 T1:30分钟  T2: 60分钟  T3:100分钟 二.答题情况及错因 T1:100         T2:55             T3 ...

最新文章

  1. 创业做什么好?先学习精英式创业从平庸到卓越
  2. 嵌入式Linux学习2——Linux常用指令2
  3. 牛客2021年愚人节比赛 【题解】
  4. 用Artifactory管理内部Maven仓库
  5. 神舟电脑冲击创业板失败 首发未获证监会通过
  6. python中wraps_【Python】Flask中@wraps的使用
  7. 目标检测(二十一)--FCN
  8. 菲律宾国防部长洛伦扎纳参观中国海军539编队芜湖舰
  9. 【软件工程】课程设计库存管理系统
  10. 河海大学计算机专硕英语面试,河海大学翻译硕士(英语)考研复试流程
  11. MongoDB实战(MongoDB开发者现身说法)
  12. 2017-2018-2 1723《程序设计与数据结构》问题汇总 (更新完毕)
  13. 深度学习基本算法介绍
  14. 红胖子 = 红 + 胖子 = 红(红模仿) + 胖子 --- 2007.6 ~ 至永远
  15. 谷粒商城-02-p20-p27
  16. java 对接中国银联 云闪付
  17. 【数学】定积分和不定积分的区别
  18. 那天喝酒把胆汁都吐出来了,找了个喝酒不伤身体的方法。。。经常喝酒的童鞋留着用吧...
  19. 人工智能,达尔文进化论
  20. 云呐|一套涉密固定资产管理软件,帮你实时监控资产

热门文章

  1. 《霜冷长河》之《壮士》----英雄归来
  2. 哪款骨传导耳机好用,好用的骨传导耳机汇总
  3. Qt 快速入门学习笔记
  4. SPSS MODELER笔记1----数据基本处理和整体方法概念
  5. 你好,女神节有个给你的惊喜请查收
  6. 幸运数的定义及其判断
  7. 标准盒模型怪异盒模型
  8. 【u-boot】uboot代码简要分析 (u-boot 移植)
  9. Webpack5快速入门 (二) CSS相关loader的使用及兼容性处理 手把手带你打开前端工程化的大门
  10. mongodb数据同步到elasticsearch的中间件,支持全量,增量,实时同步等多种同步情景。(syncs MongoDB to Elasticsearch in realtime) (Mong