算法竞赛C++基础

发布于:2024-10-10 ⋅ 阅读:(16) ⋅ 点赞:(0)

C++基础

by 幻夜的梦

C++是很复杂的语言,但打算法竞赛只需要一点点知识即可,与其说是C++,不如说是C语言+STL

万能头文件与命名空间

请背下来这两句代码,C++是兼容C语言的,洛谷刷题选C++

#include <bits/stdc++.h>
using namespace std;

#define int long long

把全部的int 改成long long类型,很多算法题都会经常爆int,所以我们直接加上这句话,这是良好的算竟习惯。

但是,加上这句话后,主函数不能使用int main()了,会报错,当然有很多题目不卡long long,这个时候你就可以用int main()。那么加上后有两种修改方式:signed main() 或者直接 main()

signed main(){ }
main(){ }

那么以后写算法题,就可以先敲出来标准的一个框架:

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	//具体内容
    
	return 0;
}

C++输入输出

这里主要介绍C++的输入输出cin与cout,cin>> 与cout<<的好处是可以连续输入输出,比较方便:

比如:cin>>a>>b>>c>>d; cout<<a<<“ ”<<b<<endl;

在万能头文件下cin、cout 可以与scanf、printf结合使用。

//输入a b,输出a+b,最后换行
//C语言风格:
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);

//C++风格:
int a,b;
cin>>a>>b;
cout<<a+b<<endl; //endl是换行的意思,你也可以cout<<'\n';

//保留小数问题用printf方便,比如保留3位小数:
double x;cin>>x;
printf("%.3lf",x);

数组大小定义

要看题目的范围,比如n最多到10^5,则定义数组一般要比这个大一点点,一般+5,防止运行错误。

const int N=1e5+5;
int a[N];//定义在main函数之前的全局变量数组全部默认赋值为0

//如果学了STL的动态数组vector,可以这样定义:
int n;cin>>n;
vector<int> v(n+5,0)//比输入的n大5,前面长度,后面赋值。

结合for循环输入输出

很多时候结合for循环输入输出很方便。

比如一道题:输入n,第二行输入n个数,输出这n个数的总和。1<=n<=200000。完整代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int a[N];
signed main(){
	int n;cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int sum=0;
	for(int i=1;i<=n;i++){
		sum+=a[i];
	}
	cout<<sum;
	return 0;
}