C/C++ 常用算法

本人在做题/阅读时的一点积累整理。
——Lrice

读入

1.需要读入数据量较大的情形,解除与scanf函数绑定,少用。

std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

2.文件操作,文本读入。

void fre(){
	freopen("C:\\Users\\acm\\Desktop\\输入文本.txt", "r", stdin);
	freopen("C:\\Users\\acm\\Desktop\\输出文本.txt", "w", stdout);
}    

3.涉及换行符的单个字符读入。

char next;
    cin.get(next);
    while (next != '\n')cin.get(next);

公约数

int gcd(int a,int b)
{
  return b?gcd(b,a%b):a;
}    //最大公约数
lcm = a * b / gcd(a,b)    //最小公倍数

位运算

1.快速幂

long pow_2(int b)
{
    long x = 2;
    long res = 1;
    while (b > 0)
    {
        if (b & 1)
            res *= x;
        b >>= 1;
        x = x * x;
    }
    return res;
}
long long Pow(long long a,long long n){
	long long ret=1;
	while(n){
		if(n&1)ret*=a;
		a*=a;
		n>>=1;
	}
	return ret;
}
long long Mod_Pow(long long a,long long n,long long mod){
	long long ret=1;
	while(n){
		if(n&1)ret=(ret*a)%mod;
		a=(a*a)%mod;
		n>>=1;
	}
	return ret;
}

2.集合的整数表示

空集:0
只含有第i个元素的集合:1 << i
含有全部元素:1 << N - 1
判断第i个元素是否属于集合S:if(S >> i & 1)
向集合中加入第i个元素:S | 1 << i
从集合中去除第i个元素:S & ~(1 << i)
集合S和集合T的并集:S | T
集合S和集合T的交集:S & T

转换

char->int

char s[100];
int x=atoi(s);

string->int

include<sstream>
void s2i(string &str,int &num)
{
stringstream ss;
ss<<str;
ss>>num;
}

并查集

int par[MAX_N];//父亲
int rank[MAX_N];//树的高度

//初始化n个元素
void init(int n)
{
	for(int i=0;i<n;i++)
	{
		par[i]=i;
		rank[i]=0;
	}
}

//查询树的根
int find(int x)
{
	if(par[x]==x)
		return x;
	else
		return par[x]=find(par[x]);
}

//合并x和y所属的集合
void unite(int x,int y)
{
	x = find(x);
	y = find(y);
	if (x == y)
	return;
	if (rank[x] < rank[y])
	    par[x] = y;
	else
	{
	    par[y] = x;
	    if (rank[x] == rank[y])
	        rank[x]++;
	}
}

//判断x和y是否属于同一个集合
bool same(int x,int y)
{
	return find(x)==find(y);
}
### 回答1: C/C++算法常用手册是程序员日常工作中不可或缺的工具书之一。该手册主要收录了程序员在开发过程中常用算法,以及相应的代码实现。该手册涵盖了诸如数据结构、排序、查找、递归、贪心、动态规划、字符串等算法,帮助程序员快速掌握这些算法的基本原理和实现方式。简单地说,该手册将算法的核心原理和实现细节集中在了一起,兼顾了易懂性和实用性。 随着程序员需求的不断增加,该手册逐渐扩充了更多的算法类型。同时,该手册还根据算法的不同应用场景进行分类,方便程序员快速查找和使用。例如,程序员可以通过该手册快速了解不同数据结构的原理和实现方法,了解常见算法的时间复杂度和空间复杂度,还可以查找常见的实际问题中的算法实现方式。 总的来说,C/C++算法常用手册是程序员必备的工具之一,帮助程序员提高算法的实现能力和解决实际问题的能力,提高程序的效率和质量。 ### 回答2: C/C++常用算法手册是一本介绍计算机算法的参考手册,主要面向C/C++语言程序员。该手册总结了各种常用算法,包括排序、查找、图论、字符串等。通过该手册的学习,可以让程序员更好地掌握C/C++编程的技巧和方法。 该手册中介绍了排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。对于不同的排序算法,手册详细介绍了它们的思路和实现方法,同时也对它们的时间复杂度和效率进行了分析和比较。 在查找方面,手册介绍了常用的顺序查找和二分查找算法,它们可以帮助程序员快速地定位和查找数据。 在图论和字符串方面,手册介绍了很多有用的算法,如最短路径算法、最小生成树算法、字符串匹配算法等。这些算法可以帮助程序员更好地解决实际问题。 总之,C/C++常用算法手册是一本非常实用和有价值的参考书,它可以让程序员掌握更多的C/C++算法技巧,提高程序员的编程能力和开发效率。 ### 回答3: C/C++ 常用算法手册是一本总结了 C/C++ 编程语言中常用算法、数据结构、设计模式等知识的参考书籍。 相对于其他语言,C 和 C++ 语言有着更高的执行效率和更多的编程自由度,也因此被广泛应用于开发高性能、底层的软件程序。在这样的应用场景下,对算法和数据结构的掌握显得尤为重要。 C/C++ 常用算法手册涵盖了各种基础的算法和数据结构,比如排序、查找、链表、树等。同时,它也介绍了一些常用的高级算法,比如动态规划、贪心算法和回溯算法。 此外,该手册还详细说明了面向对象编程领域中常用的设计模式和其实现方式,例如工厂模式、装饰器模式等。 阅读 C/C++ 常用算法手册不但能够让读者掌握常用算法的实现方法,更能提高编程思维和技巧。另外,在实际应用中,编写高效的程序不仅需要算法的巧妙运用,更需要细致、严谨的代码风格和设计思路。此时,该手册中丰富的示例代码和编码规范性的讲解也能为读者提供很大的帮助。 总之,C/C++ 常用算法手册是一本既实用又深入的参考书,适合广大 C/C++ 开发者和算法学习者阅读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值