C++OJ 算法笔记
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++OJ 算法笔记相关的知识,希望对你有一定的参考价值。
【C++】OJ算法笔记
前言
我发现学了C++,但是写OJ题时,基本的输入输出还是不会,因此还是刷洛谷题,看题解学着写代码吧。
在看大佬代码时,遇到奇淫技巧记录下来,作为学习。
头文件
- 万能头文件:
#include<bits/stdc++.h>
头文件样例:
#include<iostream>
#include<cmath>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> P;
const int maxn=200100;
const int INF=pow(2,31)-1;
const int maxm=5e4+5;
const int mod=1000000007;
ll n,k;
char a[10][10];
bool used[10];
ll cnt=0;
for循环简写
#define f(i,j,n) for(i=j;i<=n;i++)
也可以这样:
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
cin/cout快速输入/输出
ios::sync_with_stdio(false); //cin,cout快读快输,写scanf和printf的就不要加了,会RE
cin >> (str+1);
:输入从字符串下标从1开始输入n = strlen(str+1);
:输入字符串从起始下标+1开始计算到最后一个不为空为止cout << str+1 << endl;
:即可输出字符串
C输入头文件
#include <cstdio>
long long
声明长整型。
typedef long long ll;
这个操作就是给 long long
换个名字,改成 ll,用了这个之后下面所有的 ll 会自动编译成 long long
。
如代码中多次出现 long long
的时候,就先 typedef long long ll
一下,代码中就可以把所有写 long long
的地方都写成 ll
,代码就会显得比较简洁。
typedef int long_int[3];
int main()
long_int arry;
和
int arry[3];
等价
输出
常用的有cout,printf,puts
这三种。
cout
所属的库为iostream
。
剩下两个都属于cstdio
库。
#include<iostream>
using namespace std;
int main() //表示主函数
cout<<"Hello,World!"<<endl;//<<endl表示换行
return 0;//表示结束程序
#include<cstdio>
using namespace std;
int main()
printf("Hello,World!\\n");//\\n同样表示换行
return 0;
#include<cstdio>
using namespace std;
int main()
puts("Hello,World!");//puts自带换行
return 0;
puts
自带换行\\n
同样表示换行<<endl
表示换行
string
- 输入一行字符串
getline(cin, a);
- 字符串结尾是字符是
\\0
- 字符串可以直接以数组的形式取值a[i].
- 字符串可以直接拼接a+b
- 字符串对每一个字符加减ASCII值直接改变原字符串
while (cin >> a)
:输入到文件流尾部,可以一直输入
cin是输入操作符,cin>>a的过程是先取得从键盘的输入值a,并将a赋给cin,因此while(cin>>a)的意思就是只要输入的值有效,那么就执行while体内的语句。
string
可以直接比较字典序大小- find(substring):找不到返回
-1
char a[1000], scanf("%s", a));
:C语言输入字符串可以以数组形式读取.strcmp("#", a) == 0
比较字符串大小,头文件#include<string.h>
strlen(c)
:获取字符串长度.strstr(a,c);
:判断是否包含返回位置索引
数据结构
stack<char> stack;
:创建一个栈对象
memset
memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
void *memset(void *s, int ch, size_t n);
-
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
-
memset作用:是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
memset()
函数原型是extern void *memset(void *buffer, int c, int count)
- buffer:为指针或是数组,
- c:是赋给buffer的值,
- count:是buffer的长度.
例如:memset(used,false,sizeof(used));
char buf[1024] = 0 ;
去年大三时候的笔记,一直藏到现在,未完待续!
以上是关于C++OJ 算法笔记的主要内容,如果未能解决你的问题,请参考以下文章