C++/竞赛
一、字符(串)读入
1)gets()。!!!!!!!字符数组!!!!!。
用于从标准输入流stdin读入一个整行(以'\n'或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的'\n'从流中取出,但不写入数组。gets()不检查被写入的数组大小。
2)getchar()。单个字符。
用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。
3)getline(cin,st)。!!!!!!!字符串!!!!!!。
st为一个字符串。此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。
–从输入流中读入字符,存到string变量
–直到出现以下情况为止:
?读入了文件结束标志
?读到一个新行
?达到字符串的最大长度
–如果getline没有读入字符,将返回false,可用于判断文件是否结束
4) cin。遇到回车与空格结束读取。
二、常见Ascill码
1)A的ASCII代码为65
2)a的ASCII代码为97
3)0(数字零)的ASCII代码为48
三、in&out
1、文件输入输出
freopen("xxx.in","r",stdin);
freopen("xxx.out","w",stdout);
...
fclose(stdin);fclose(stdout);
2、输入到行末、文末
1)输入n行,每行数量不定
for(int i=1;i<=n;i++){
char c=' ';
while(c!='\n'){
cin>>a[tot++];
c=getchar();
}
}
2)到文件结束
while (scanf("%d%d",&a,&b) != EOF)// 一律用这种写法,把你的scanf函数写成这样子,除了return 0之外,其他的语句都要用大括号括起来
四、快速排序
//情况一:数组排列
int A[100];
bool cmp1(int a,int b)//int为数组数据类型
{
return a>b;//降序排列
//return ab.id;//按照学号降序排列
//return a.id
五、STL堆
https://blog.csdn.net/c20182030/article/details/70757660
六、读入优化
int read(){
int x=0,p=getchar();
while (p>'9'||p<'0') p=getchar();
while (p<='9'&&p>='0') x=x*10+p-'0',p=getchar();
return x;
}
七、快速幂
long long quick_pow(long long a,long long b,long long k){//a^b mod k
long long ans=1,x=a,y=b;
while (y!=0){
if (y&1==1) ans=(ans*x)%k;
x=(x*x)%k;
y>>=1;
}
return ans;
}
八、二分查找
l=0,r=maxn;
while(l<=r){
m=(l+r)/2;
if (check(m)) l=m+1;
else r=m-1;
}
最小值最大(满足条件的最大值)————>cout<cout<
九、memset
memset(a, 0, sizeof(a));//数组中的所有元素全为0
memset(a, -1, sizeof(a));//数组中的所有元素全为-1
memset(a, 127, sizeof(a));//数组中的所有元素全为2139062143
十、unique去重
unique的作用是“去掉”容器中相邻元素的重复元素,这里去掉要加一个引号,为什么呢,是因为它实质上是一个伪去除,它会把重复的元素添加到容器末尾,而返回值是去重之后的尾地址(是地址!!),举个例子:
int num[10]={1,1,2,2,2,3,4,5,5,5};
int ans=unique(num,num+10)-num;
这时,返回的ans是5,而num中前5项就是1,2,3,4,5,一般使用前需要对容器进行排序,这样才能实现对整个数组去重。
sort(t+1,t+n+1);
len=unique(t+1,t+1+n)-t-1;
十一、树状数组
https://www.luogu.org/problemnew/solution/P3368
1、实现单点修改&区间查询
2、实现区间修改&单点查询(差分)
十二、isringstream
一个比较有用的c++的输入输出控制类。
C++引入了ostringstream、istringstream、stringstream这三个类,
要使用他们创建对象就必须包含这个头文件。
istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于执行C风格的串流的输出操作。
strstream类同时可以支持C风格的串流的输入输出操作。
istringstream的构造函数原形如下:
istringstream::istringstream(string str);
它的作用是从string对象str中读取字符。
#include
#include //istringstream 必须包含这个头文件
#include
using namespace std;
int main()
{
string str="i an a boy";
istringstream is(str);
string s;
while(is>>s)
{
cout<