学大伟业 Day 1 培训总结
第一天培训,讲的基本算法,东西很多。还有些数论,图论,数据结构and some small tricks
一.输入输出技巧
//输入输出技巧
/*
scanf、printf:速度快,需要记忆不同数据类型的格式化字符串
cin、cout:简单,在某些情况下较慢
getchar:读入一个字符
puts/gets/cin.getline(a,100)如果a是大小为100的字符数组/getline(cin,a)如果a是一个string:输出/输入一个字符串
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{ int a,n,h,min;
char m[];
// 1.题目中不清楚输入输出的数据数量,可以用scanf的返回值解决。
while(scanf("%d",&a)!=EOF)
{
n++;
//.....
}
// 2.cin读入字符串以空格、回车结束。scanf、getchar读入字符串不会舍弃回车。gets读入字符串以回车结束。
std::ios::sync_with_stdio(false);//cin可以关闭同步加速。 // 3.scanf的妙用。举个栗子。再输入一个时间的时候,往往用字符串读入再取出时间。但scanf可以直接取出时间。
scanf("%d:%d",&h,&min);//当在读入时必须遇到‘:’才会继续读入,读入的为两个整数,就是时间。
}
二.数组的高级用法
//基础数据结构——数组
/*
数组很常见,同时也是很多高级数据结构的基础
数组也有很多妙用 基本:储存数据,做统计等
扩展:部分和数组,差分数组
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int a[];
int sum[];//部分和(前缀和)数组 sum[i]表示 a[i]+a[2]+...+a[i] 的值
int diff[];//差分数组
int sumd[];//差分数组diff的部分和数组
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]); //sum :
sum[]=a[];
for(int i=;i<=n;i++)
sum[i]=sum[i-]+a[i];
//用途:方便计算区间 L~R 的值num
int L,R;
scanf("%d%d",&L,&R);
int num=sum[R]-sum[L-]; //diff :
diff[]=a[];
for(int i=;i<=n;i++)
diff[i]=a[i]-a[i-];
//用途:差分数组适用于离线的区间修改问题
//常用结论:a[]的差分数组是diff[] 而diff[]的部分和数组是a[]
/*证明:sumd[i]=diff[1]+diff[2]+...+diff[i]
sumd[i]=a[1]+a[2]-a[1]+a[3]-a[2]+...+a[i]-a[i-1]=a[i]*/
}
三.竞赛树
//竞赛树
/*
针对添加元素的数量确定的情况
使用多一倍的空间,换取代码实现上的方便
关键操作:上滤
一种很奇怪的数据结构..也不算奇怪总之做题时会有用处的。
数据都储存在叶子节点,内部节点储存子节点的较大值。
*/
#include<iostream>
using namespace std;
const int INF = 0x7fffffff/;
const int MAXN = ;
struct tree{
int data[MAXN*];
int n;
tree(int n)
{
this->n=n;
for(int i=;i<=*n-;i++) data[i]=-INF;
}
void update(int pos, int value)
{
pos=pos+n-;
data[pos]=value;
while(pos/=) data[pos]=max(data[pos*],data[pos*+]);
}
int top() { return data[];}//返回最大值
int toppos()//返回最大值的位置
{
int pos=;
while(pos<n)
{
if(data[pos]==data[pos*]) pos=pos*;
else pos=pos*+;
}
return pos-n+;
}
};
int main()
{
//.....
}
四.快速幂
//数论——快速幂
/*
计算 k^p%m
递归的版本(并不如位运算效率高),运算时采用乘法。
其实可以改成加法,使用加法更不容易爆longlong.
*/
#include<iostream>
#include<cstdio>
using namespace std;
int pow1(int k,int p,int m)
{
if(p == ) return ;
long long ans = pow1(k,p/,m);
return p%==?(ans*ans*k)%m:(ans*ans)%m;
}
long long pow2(long long k,long long p,long long m)
{
if(p==) return ;
long long ans=pow2(k,p/,m);
return p%==?(ans+k)%m:(ans+ans)%m;
}
int main()
{
long long k,p,m;
cin>>k>>p>>m;
cout<<k<<"^"<<p<<" mod "<<m<<"="<<pow2(k,p,m);
cout<<k<<"^"<<p<<" mod "<<m<<"="<<pow1(k,p,m);
return ;
}
学大伟业 Day 1 培训总结的更多相关文章
- 学大伟业 Day 6 培训总结
今天接着昨天的继续讲数据结构 今天先是 分块 在统计问题中,尤其是序列问题,经常涉及到区间的操作,比如修改一段区间的元素,询问某个区间的元素的信息. 如果每次都对一整个区间的每一个元素进行操作的话,那 ...
- 学大伟业 Day 5 培训总结
今天讲数据结构 先从mzx大佬的ppt摘抄一段: 数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合. 通常情况下,精心选择的数据结构可以带来更高的运行或 ...
- 学大伟业 Day 3 培训总结
今天讲的字符串: 不多说,直接看题 一.表达式求值 题目大意: 输入一行一个表达式,计算其答案 表达式包含非负整数.加减乘除.括号 两种做法 ·栈 ·表达式树 这里更推荐表达式树,因为栈是先压进去,逆 ...
- 学大伟业 Day 2 培训总结
一.dp 动态规划的本质 是一种思想.通过对原问题划分成子问题,寻找子问题之间的联系,通过求解子问题得出原问题的解.与贪心不同的是,动归是深谋远虑,考虑全局最优解:而贪心则目光短浅,只考虑局部最优解. ...
- 学大伟业 Day 4 培训总结
今天讲的全是dp... 不多废话,先看一道经典的模板LIS(最长不下降子序列) 一.LIS 给定一个长度为N的数列,求最长上升子序列 例:1 7 2 8 3 4 答案:1 2 3 4 代码: #inc ...
- 学大伟业Day1解题报告
学大伟业Day1解题报告 张炳琪 一. 时间分配 T1:30分钟 T2: 60分钟 T3:100分钟 二.答题情况及错因 T1:100 T2:55 T3 ...
- 学大伟业 2017 国庆 Day1
期望得分:100+100+20=220 实际得分:100+100+20=220 (好久没有期望==实际了 ,~\(≧▽≦)/~) 对于 a........a 如果 第1个a 后面出现的第1个b~z 是 ...
- 2017-10-23学大伟业Day1
T1 叉叉 题目名称 叉叉 程序文件名 cross 输入文件名 cross.in 输出文件名 cross.out 每个测试点时限 1秒 内存限制 128MB 测试点数目 10 每个测试点分值 10 是 ...
- 学大伟业 国庆Day2
期望得分:30+100+0=130 实际得分:30+100+20=150 忍者钩爪 (ninja.pas/c/cpp) [问题描述] 小Q是一名酷爱钩爪的忍者,最喜欢飞檐走壁的感觉,有一天小Q发现一个 ...
随机推荐
- GoLang爬取花瓣网美女图片
由于之前一直想爬取花瓣网(http://huaban.com/partner/uc/aimeinv/pins/) 的图片,又迫于没时间,所以拖了很久. 鉴于最近在学go语言,就刚好用这个练手了. 预览 ...
- ACdream 1098——圆有点挤——————【数学计算】
圆有点挤 Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit Status Pr ...
- Linux Kernel文件系统写I/O流程代码分析(一)
Linux Kernel文件系统写I/O流程代码分析(一) 在Linux VFS机制简析(二)这篇博客上介绍了struct address_space_operations里底层文件系统需要实现的操作 ...
- Redis 的Hashs(哈希表)数据类型
在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值,比如用户的昵称.年龄.性别.积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序 ...
- json中定义数组
我们经常会看到在js中定义普通函数: function f1(a,b){ console.log(a+b); } f1(); 今天我们看一下如何在json里边定义函数并调用: var json = { ...
- jQuery.vilidation.js登录&注册
代码解析:通过ajax获取url路径链接php接口做登录和注册获取到的数据传到数据库. ajax利用四步: //1.创建一个ajax对象; //2.打开请求: //判断用户传递的是get还是post请 ...
- Highcharts error #14: www.highcharts.com/errors/14
错误原因:数据类型错误,需要的是Number类型,传入的却是String 以为为官网说明: Highcharts Error #14 String value sent to series.data, ...
- envi利用矢量数据对影像做多边形裁剪 (转)
2011-05-25 17:31:10| 分类: ENVI|举报|字号 订阅 来自:http://zhangling357522.blog.163.com/blog/static/184687296 ...
- oracle查询时间
oracle查询和时间有关的命令: 方法一:select * from dual where time between to_date('2012-06-18 00:00:00','yyyy-mm-d ...
- 【Leetcode】【Easy】Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space. 判断一个整数是不是回文整数(例12321).不能使 ...