【2019暑期】【PAT甲级】考前总结

48 篇文章 0 订阅

图论树见专项

string

reverse(string.begin(), string.end()) 反转
string.erase 删除某一位置上的字符
stoi(string) // 把string转换为int
atoi(string.string_str()) // 把string转换为int
to_string(int) //把int转为string

字符串截取 a = s.substr(i,k)
第i个起,截取k个

STL

用一个set就能解决重复和排序问题
复习set用法,访问用it指针,set默认去重,从小到大排序
添加元素用insert,清除某一个用erase,查找某一个用find

vector的back是返回最后一个值
pop_back()不带参数,弹出最后一个值

其他

Dev C++ 里不能用 string头文件里函数的原因:
编译器问题
工具——编译选项——代码生成/优化——代码生成——语言标准(-std),选择ISO C++11。

0,1都不是素数

平方探测法

vector tin(ans,ans+n+1);赋值

1.大顶堆小顶堆不是左右子树比大小
大顶堆是父节点都大于子节点
小顶堆是父节点都小于子节点
2.存树的时候
如果下标从0开始的时候,左右点用i *2+1 i *2+2
如果下标从1开始的时候,左右点用i *2, i * 2+1
走所有的父节点时
从0开始 是到(size-1)/ 2
从1开始 是到size / 2

rank排名方法

arr[0].rank = 1;
for(int i=1; i<l; i++){
    if(arr[i].score == arr[i-1].score) arr[i].rank = arr[i-1].rank;
    else arr[i].rank = i+1;
}

int rank=0;
	int pre = -1;
	for(int i=0; i<ans.size(); i++){
		if(pre != ans[i].score) rank++;
		pre = ans[i].score;
	}

unordered_map 是map的无序版,时间更短,不会超时
map底层是红黑树,平衡二叉树插入,需要时间
unordered_map 是用哈希,时间更短
注意需要加头文件,和本身名字一样

学习到了vector里面是结构体的时候怎么插入
ans.push_back(node{,})

atof:将数字字符串转为浮点数,但是atof是针对char类型。string转为char,使用s.c_str()
stof:将string类型转为浮点数float
stod: 将string转为double类型

sscanf(a,"%d",b) a为某某格式存入b
sprintf(a,"%d",b)b为某某格式存入a

这道题1的情况要单独输出,因为是number单数,不是numbers

unsigned int 0~4294967295 (10位数,4e9)

int -2147483648~2147483647 (10位数,2e9 2^31 - 1)

long long: -9223372036854775808~9223372036854775807 (19位数, 9e18 ) 2^63 - 1

unsigned long long:0~18446744073709551615 (20位数,1e19) 2^64 - 1

ceil(a) 向上取整
floor(a) 向下取整
round(a) 四舍五入

进制转换

do{
    arr[l++] = n%d;
    n /= d;
  }while(n != 0);
  for(int i=0; i<l; i++){
      n = n*d + arr[i];
  }

STL模板 nth_element
可以用来取中间数

#include <algorithm>

nth_element(arr.begin(),arr.begin+(l-1)/2,arr.end());

二分查找

while(left < right){
        mid = (left + right)/2;
        if(arr[mid]  >= m)
            right = mid;        
        else left = mid + 1;
    }
inlcude <cctype>

isupper(c) 是否为大写
islower(c) 是否为小写
isdigit(c) 是否为数字
isalpha(c) 是否为字母
isalnum(c) 是否为字母或数字
tolower() 大写字母转换为小写字母
toupper() 小写字母转换为大写字母

最大公约数

int gcd(int a, int b){
return b == 0 ? a : gcd(b,a%b);
}

最小公倍数

 int icm(int a, int b){
 return a*b/gcd(a,b);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值