Acwing算法刷题知识点

1.有关于输出字符串时,scanf、rintf和cin、cout的区别

scanf(“%c”, )注意用scanf读入字符型数据时,会将最后的回车也算上,导致读入错误,在读入字符型数据时尽量使用cin
printf输出字符串是针对char *的,换言之,printf只能输出C语言中的内置数据,string不是c语言内置数据。
更深入的来说:s这个string类型的对象并非单单只有字符串,其内还有许多用于操作的函数,于是&s并非
字符串“Hello”的首地址,而是s这个对象的首地址。
此时就需要用到c_str()方法:返会当前字符串的首地址。

string s = "Hello";
printf("%s", s);  
// 这样输出s会导致乱码,因为s不是首地址,需要用c_str()成员方法返回当前字符串的首字符地址
代码修改为:
printf("%s", s.c_str());
//这样即可输出Hello
//或者输出字符串时直接用cout<<s

2.当需要用到一个数字的长度时,可以使用库函数to_string将数字转化为string类型再size()

int i = 5000;
int len = to_string(i).size;
//能够得到len = 5

3.cin cout和scanf printf的速度比较

cin、cout是在编译期间就决定了读入变量的类型。而scanf()是在运行期决定的,编译器无法优化,而且还要识别字符串。理论上scanf比cin要慢很多,实际上快的原因是很多编译器对cin、cout的处理过于保守。因此理论上前者应该更快,但是由于编译器的处理导致实际上后者更快。总结的建议是:在OJ上做题时尽量使用scanf和printf更为靠谱。

4.血淋淋的教训:最后输出的变量在定义时一定要在全局变量,或者局部变量时一定要赋初值

局部变量不初始化时值是不确定的,可能会导致最后答案出错都不知道问题在哪

5.sort()函数用法

sort()函数左闭右开,即sort(a, b), a为要排序的第一个数的下标,b为要排序的最后一个数的下一个数的下标。

sort默认正序
若要实现从大到小排列,则可以用
sort(a, b, greater<int>);
即可实现倒序
正序中第三个参数为
sort(a, b, less<int>);

//自创排序规则:
//sort函数可以自定排序规则进行排序
int w[N],s[N];//w为数字数字,s[N]为每个数字的各位之和
sort(w, w + n,[&](int a,int b){   //数组中最好加一个引用,否则有可能只是复制该数组,并没有改变该数组
	if(s[a] != s[b])	return s[a] < s[b];
	else	return a < b;
})
//意思即为,如果各位数字之和不等时,即按各位数字之和大小排序
//如果各位数字之和相等,即按数字本身大小排序

见例题Acwing 4653.数位排序

6.求数组长度函数

1.字符串数组:strlen(s);
2.数字数组:sizeof(arr) / sizeof(int);
3.其他容器长度:见常用c++STL

7.哈希表和pair数组的区别

#include<unordered_map>
哈希表:
unordered_map<int,int> res;
哈希表没有first和second操作,res[i] ++,代表的是将键为i的元素值+1,res.first++为非法操作
pair数组:
pair<int,int> p;
pair数组无法访问下标操作,p.first ++表示将第一个元素自增,second不变,res[i]++为非法操作

8.优先队列(模拟堆操作)

#include<queue>
typedef pair<int,int> PII;
priority_queue<PII, vector<PII>, greater<PII>> q[N]
//这是定义了一个优先队列数组,每个数组元素类型是PII,底层容器为vector,按照第一个元素从小到大排列

相关题目:acwing.3492.负载均衡

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值