第一天培训,讲的基本算法,东西很多。还有些数论,图论,数据结构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[];
  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[];
  15. int sum[];//部分和(前缀和)数组 sum[i]表示 a[i]+a[2]+...+a[i] 的值
  16. int diff[];//差分数组
  17. int sumd[];//差分数组diff的部分和数组
  18. int main()
  19. {
  20. int n;
  21. scanf("%d",&n);
  22. for(int i=;i<=n;i++)
  23. scanf("%d",&a[i]);
  24.  
  25. //sum :
  26. sum[]=a[];
  27. for(int i=;i<=n;i++)
  28. sum[i]=sum[i-]+a[i];
  29. //用途:方便计算区间 L~R 的值num
  30. int L,R;
  31. scanf("%d%d",&L,&R);
  32. int num=sum[R]-sum[L-];
  33.  
  34. //diff :
  35. diff[]=a[];
  36. for(int i=;i<=n;i++)
  37. diff[i]=a[i]-a[i-];
  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/;
  12. const int MAXN = ;
  13. struct tree{
  14. int data[MAXN*];
  15. int n;
  16. tree(int n)
  17. {
  18. this->n=n;
  19. for(int i=;i<=*n-;i++) data[i]=-INF;
  20. }
  21. void update(int pos, int value)
  22. {
  23. pos=pos+n-;
  24. data[pos]=value;
  25. while(pos/=) data[pos]=max(data[pos*],data[pos*+]);
  26. }
  27. int top() { return data[];}//返回最大值
  28. int toppos()//返回最大值的位置
  29. {
  30. int pos=;
  31. while(pos<n)
  32. {
  33. if(data[pos]==data[pos*]) pos=pos*;
  34. else pos=pos*+;
  35. }
  36. return pos-n+;
  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 == ) return ;
  13. long long ans = pow1(k,p/,m);
  14. return p%==?(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==) return ;
  19. long long ans=pow2(k,p/,m);
  20. return p%==?(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 ;
  29. }

学大伟业 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 代码: #inc ...

  6. 学大伟业Day1解题报告

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

  7. 学大伟业 2017 国庆 Day1

    期望得分:100+100+20=220 实际得分:100+100+20=220 (好久没有期望==实际了 ,~\(≧▽≦)/~) 对于 a........a 如果 第1个a 后面出现的第1个b~z 是 ...

  8. 2017-10-23学大伟业Day1

    T1 叉叉 题目名称 叉叉 程序文件名 cross 输入文件名 cross.in 输出文件名 cross.out 每个测试点时限 1秒 内存限制 128MB 测试点数目 10 每个测试点分值 10 是 ...

  9. 学大伟业 国庆Day2

    期望得分:30+100+0=130 实际得分:30+100+20=150 忍者钩爪 (ninja.pas/c/cpp) [问题描述] 小Q是一名酷爱钩爪的忍者,最喜欢飞檐走壁的感觉,有一天小Q发现一个 ...

随机推荐

  1. 2、java内存间交互操作

    关于主内存与工作内存之间具体的交互协议,即一个变量如何从主内存拷贝到工作内存,如何从工作内存同步回主内存之类的实现细节,java内存模型中定义了8种操作来完成,虚拟机实现时必须保证这8种操作都是原子的 ...

  2. Android ContentProvider的介绍(很详细)

    博客分类: android进阶   一.ContentProvider的概念 ContentProvider:为存储和获取数据提供统一的接口.可以在不同的应用程序之间共享数据.Android已经为常见 ...

  3. java的访问修饰符

    Java中通过访问控制符(default,private,public,protected)来控制对类.变量.方法.构造方法的访问. 下表说明了4中修饰符的访问权限: 修饰符 当前类 同一包内 子孙类 ...

  4. 白话SpringCloud | 第五章:服务容错保护(Hystrix)

    前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用.在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如 ...

  5. JS的从理解对象到创建对象

    JavaScript不是一门真正的面向对象语言,因为它连最基本的类的概念都没有,因此它的对象和基于类的语言中的对象也会有所不同.ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值.对 ...

  6. ICONIX

  7. 实用的随机数生成类Random:测试(随机产生100个不重复的正整数)

    实用的随机数生成类Random:测试(使用Random类随机生成100个不重复的正整数) 一.之前我们使用随机数用的是Math类的random()方法: tips: 产生随机数(0~9中任意整数)的方 ...

  8. Java transient和volatile关键字

    关键字Volatile Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总 ...

  9. Django组件——forms组件

    一.校验字段功能 通过注册用户这个实例来学习校验字段功能. 1.模型:models.py from django.db import models # Create your models here. ...

  10. H5新特性-----type=file文件上传

    1.语法 单文件上传:<input type="file" id="file1"/> 多文件上传:<input type="file ...