这篇博客的话,大家可以参考,在2天时间里写的,主要搜集了一些知识点和资料,一半是我个人见解,有不全面的地方还望大家私信我,帮我提出问题,我会在以后的博文中更加注意,谢谢!
注:下面有附表,和字符串有关,很实用,可以参考一下
考点1
基本输入输出+分支
最简单的一部分,基本上分值占比很小,搞清分支顺序,控制编代码时间
考点2
循环(嵌套)
有点上强度了,就是知识点宽而浅,但是编起代码来就各种条条框框贼复杂,多刷题面复杂一点的题
考点3
数组
一维的话,考点主要是元素的操作(移动,删除等)以及排序,这类基本无脑sort,但可能会让你输出选择/冒泡的过程,那就得掌握这两个代码大致怎么写,桶的话用武之地不一定大,还有很重要的是查找,对于严格递增递减序列肯定要二分,不然就活该TLE,必须掌握二分,不是严格递增递减那就sort+二分,盲猜必考,二分用递归当然很好,死记硬背函数怎么写不一定不行qwq
二维数组
这个更恶心,基本就是考填数,角标发挥作用很大,简单一点的是杨辉,难一点的,输出这种:
1 2 4 7
3 5 8
6 9
10
这个你就好好想吧,把他关系搞清楚,边界就画图弄明白,接下来看你发挥了,数组范围开大点记得,RTE不好看
考点4
函数初步,结构体
如果要往难了考的的话,就是思维含量不高,纯叠复杂度,我不觉得有哪道题是非结构体不可的,写函数目的是降低主函数多次实现同一功能写代码的难度,别本末倒置了
考点5
递归
难度排名得第二,你不把递推式弄明白明年也做不出来,考察你数学能力的,这种题的话,自己多算几组找规律,实在不会递归想想循环行不行,但能用递归实现当然最好,汉诺塔必修,你能做对90%汉诺塔及其变式问题你就是递归概念神,反正核心是找递推式啦
考点6
字符串
第一次感觉信竞要背的也很多啊!把string所有函数用法全背出来就差不多了,下面附表为常用字符串函数(见附表),你知道和不知道里面涉及到的函数简直像在做两道题,我个人建议能用string就别用字符数组,总之这类型的掌握了方法就能做
考点7
高精度
这位才是难度榜第一,信竞萌新遇到的第一个大BOSS,只考加乘就很幸运,我就死记硬背好了,如果想靠理解那就是复现列竖式的过程了,控制下运行的用时
以下附表
附表:
字符串的声明和赋值
声明:string s;
输入的字符串在内存允许的范围内可以任意长。
可以输入中文。
读入:
不含空格的字符串 cin>>s;
包含空格、制表符等空白字符的字符串
getline(cin,s);
功能读入一个字符串s,读到换行符或EOF就结束
存储:长度为n的字符串s存储在s[0]~s[n-1],无其余字符。
输出:s=”China”;cout<<s;或者cout<<s[3];
例如:
string s;int c;
while(cin>>s)
c++;
//每次读入的单词放到s中,直到读入文件结束符//
可以给字符串变量赋值;
例如:s1=“abcde”; s2=s1;
不能对空的字符串变量的某一位置赋值(因为还不存在)。
但可以象数组一样改变某个已经存在的位置的值。
例如:
错误赋值:string a; for(i=1;i<=5;i++) s[i]=’a’;
正确赋值 s=“12345”;s[1]=b;cout<<s;结果输出1b345;
但是s=“Iamlucky”;s[8]=’p’;就是错误的。
对一位赋值要满足字符串长大于下标,也就是这一位本来就在字符串中。
求字符串的长度
用法:s.size();或s.length();
功能:返回s的长度,时间复杂度O(1),可以反复调用
例如:
s=”abcdefg”;n=s.size();则n=7;
islower(s[i]) s[i]<=’z’ && s[i]>=’a’
判断字符串s第i位是否小写字母,如果是返回1,否则返回0;
isupper(s[i])
判断字符串s第i位是否大写字母,如果是返回1,否则返回0;
isdigit(s[i])
判断字符串s第i位是否数字字符,如果是返回1,否则返回0;
s[i]=tolower(s[i])
将字符串s第i位改写为小写字母;
s[i]=toupper(s[i])
将字符串s第i位改写为大写字母;
查找子串1
用法:s.find(t);
功能:在s中查找t,如果t出现,则返回t第一个出现的位置(从0开始),否则返回2^64-1(赋值给int后可以转为-1)
查找子串2
用法:s.find(t,x);
功能:在s的第x位及之后查找t,如果t出现,则返回t第一个出现的位置(从0开始),否则返回2^64-1(赋值给int后可以转为-1)
拼接函数1——字符串接字符
用法:s.push_back(ch);
功能:在字符串s后面加上一个字符ch
注意:时间复杂度为常数,可以反复调用
拼接函数2
用法:s.append(t);
功能:在字符串s后面加上一个字符串t
注意:时间复杂度为线性
拼接3
用法:s=s+ch; s=ch+s;
功能:在字符串s后面(或前面)加上一个字符ch
注意:时间复杂度不是常数,低于线性复杂度。拼接时不能是两个字符串常量拼接
替换字符串
用法:s.replace(x,len,t);
功能:将s的第x位及之后的len位替换为字符串t,下标从0开始。
注意:x~x+len-1一定要是合法的下标!
例子:s=“abcde”;x=1;len=3;t=“**”;执行s. replace(x,len,t)后,s=“a**e”。
复制子串函数
用法:s1=s.substr(t,x);
功能:将字符串s中从t位开始到x位前一位共(x-t)个字符复制到s1中。
样例:
s="12345asdf";
s1=s.substr(0,5);
输出结果为:12345
删除子串
删除子串1
用法:s.erase(x);
功能:删除s的第x位及之后的所有字符,返回一个字符串。下标从0开始。
注意:x一定要是合法的下标!
删除子串2
用法:s.erase(x,y);
功能:删除s的第x位及之后的y个字符,返回一个字符串。下标从0开始。
注意:x~x+y-1一定要是合法的下标!
删除子串3
用法:s.erase(it);
功能:删除对应地址为it及之后的元素
注意:it是地址
删除子串4
用法:s.erase(it1,it2);
功能:删除对应地址在[it1,it2)之间的元素
注意:it1,it2是地址,为左闭右开区间
插入字符串
用法:s.insert(x,t);
功能:在s的第x位上插入字符串t,下标从0开始。
注意:x一定要是合法的下标!
例子:s=“01234”;x=3;t=“abc”;执行s.insert(x,t)后,s=“012abc34”。
C++字符串指针
头尾指针函数
用法:s.begin();s.end();
功能:范围s的头尾指针,和数组指针一致。
注意:可以使用一些STL函数,例如sort(s.begin(),s.end());和reverse(s.begin(),s.end());
字符串的关系运算
关系运算符:>、<、==、>=、<=、!=
运算规则:无论比较的两个字符串长度是否相同,从左到右按照它们的ASCII码值逐一进行比较。当两个字符的ASCII值不等时,便可比较出大小。若短字符串和长字符串的左边字符都相等时,长串比短串值大。
‘A’的ASCⅡ值为65,‘a’的ASCⅡ值为97,所以‘a’>’A’ , "Ab" >"ab"
字符串类型转换成其他类型的函数(c++11可用)
字符串转整型 stoi(“123.36”)
字符串转long long stoll(“123.36”)
字符串转float stof(“123.36”)
应用实例:s="3454895.128";
a1=stoi(s);a2=stoll(s);a3=stof(s);
cout<<a1<<endl; 输出3454895
cout<<a2<<endl; 输出3454895
cout<<a3<<endl; 输出3.4549e+006
数转字符串函数(c++11可用)
to_string(int n)
功能:将整数转换成字符串。
to_string(double a)
功能:将实数转换成字符串,转换成的字符串小数点后有6位。