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 算法笔记的主要内容,如果未能解决你的问题,请参考以下文章

C语言----OJ笔记

ZSTU OJ 4272 最佳淘汰算法

算法实战-OJ之旅

数据结构---线性表(顺序表OJ)

2018/7/31 -zznu-oj -问题 C: 磨刀- 扩展欧几里得算法的基本应用

python学习笔记012——pdb调试