基础题集题解 -2021.1.15

A - A + B Problem HDU - 1000

水题

#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
   
   
	ios::sync_with_stdio(0);
	int a, b;
	while (cin >> a >> b)
		cout << a + b << endl;
	return 0;
}

B - Sum Problem HDU - 1001

水题

#include<map>
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
   
   
	ios::sync_with_stdio(0);
	int a, b, sum = 0;
	while (cin >> b) {
   
   
		sum = 0;
		for (int i = 1; i <= b; i++)
			sum += i;
		cout << sum << endl << endl;
	}
	return 0;
}

C - Let the Balloon Rise HDU - 1004

使用map记录每个字符串的出现次数即可

#include<map>
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
   
   
	ios::sync_with_stdio(0);
	map<string,int> m;
	int num;
	while (cin >> num){
   
   
		if (num == 0)
			break;
		string max;
		int cnt_max = 0;
		m.clear();
		while (num--) {
   
   
			string s;
			cin >> s;
			m[s]++;
			if (cnt_max < m[s]) {
   
   
				cnt_max = m[s];
				max = s;
			}
		}
		cout << max << endl;
	}
	return 0;
}

D - Number Sequence HDU - 1005

矩阵快速幂运算,需先计算出初始矩阵,还有一种打表找规律的解法,可交题ac,但题目本质上是递推公式

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2;
const int mod = 7;
struct matrix {
   
   
	long long m[maxn][maxn];
	matrix() {
   
   
		memset(m, 0, sizeof(m));
	}
};
matrix multi(matrix a, matrix b) {
   
   
	matrix res;
	for (int i = 0; i < maxn; i++)
		for (int j = 0; j < maxn; j++)
			for (int k = 0; k < maxn; k++)
				res.m[i][j] = res.m[i][j] + a.m[i][k] * b.m[k][j] % mod;
	return res;
}
matrix fastm(matrix a, int n) {
   
   
	matrix res;
	for (int i = 0; i < maxn; i++)
		res.m[i][i] = 1;
	while (n) {
   
   
		if (n & 1)
			res = multi(res, a);
		a = multi(a, a);
		n >>= 1;
	}
	return res;
}
int main()
{
   
   
	matrix mar;
	long long x, y, n;
	while (cin >> x >> y >> n) {
   
   
		if (x == 0 && y == 0 && n == 0)
			break;
		mar.m[0][0] = x;
		mar.m[0][1] = y;
		mar.m[1][0] = 1;
		mar.m[1][1] = 0;
		if (n <= 2)
			cout << "1" << endl;
		else {
   
   
			matrix res = fastm(mar, n - 2);
			cout << (res.m[0][0] + res.m[0][1]) % 7 << endl;
		}
	}
	return 0;
}

E - Elevator HDU - 1008

水题

#include<stdio.h>
int main(int argc, const char* argv[])
{
   
   
	int sum, num = 0,floor,floor1 = 0;;
	while (scanf("%d", &num) != EOF)
	{
   
   
		if (num == 0)
			break;
		sum = 0;
		floor = 0;
		for (int i = 0; i < num; i++)
		{
   
   
			scanf("%d", &floor1);
			if (floor > floor1)
				sum +
<think>首先,用户查询是:“我想查找或下载关于分治算法的C++版PDF资料请问分治算法C++PDF资料2021.02.04”。用户想要关于分治算法在C++中的PDF资料,具体提到日期2021.02.04,但可能指的是资料发布日期或相关时间。我需要遵循系统级指令:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问-回答中引用的段落末尾自然地添加引用标识,例如[^1]。在用户可见层:-回答结构清晰,帮助用户逐步解决问-尽量保证回答真实可靠。参考提供的引用:-引用[1]提到数据结构与算法,包括分治算法相关的算法-引用[2]提到线性方程组的高斯消元法、STL模板、面向对象程序设计、数据结构等。-引用[3]强调数据结构与算法是相辅相成的。用户查询是关于分治算法的C++PDF资料。我需要提供相关信息,但由于我是AI,不能直接下载文件或提供实时链接。我应该引导用户到可靠资源或建议搜索方法。关键点:-分治算法(DivideandConquer)是算法设计策略,如快速排序、归并排序等。-C++实现。-PDF资料。可能的响应结构:1.**理解需求**:确认用户想要分治算法的C++实现PDF。2.**提供资源建议**:建议在线资源、书籍、教程。3.**生成相关问**:作为指令的一部分。4.**确保真实可靠**:基于一般知识,避免虚假信息。真实资源建议:-书籍:如《算法导论》(IntroductiontoAlgorithms)有分治算法章节和C++代码。-在线PDF:如大学讲义、开源书籍。例如,GeeksforGeeks、LeetCode有文章和PDF。-具体搜索:建议搜索关键词如"divideandconqueralgorithmc++pdf"。日期2021.02.04:可能用户记错了,或者是特定事件。我应该忽略或一般处理。生成相关问-指令要求生成相关问,放在回答末尾。回答格式:-使用中文。-结构清晰:先介绍分治算法,然后提供资源建议。-添加引用标识:如果引用内容,加[^1]等。引用来自提供的引用列表。引用内容:-引用[1]:提到数据结构与算法之【深搜&宽搜递归&分治&剪枝回溯】篇,有分治相关算法-引用[3]:强调数据结构和算法的关系。我可以这样引用:-"分治算法常用于解决递归问,如归并排序和快速排序[^1]."步骤:1.介绍分治算法。2.建议PDF资源。3.提供C++示例(简短代码)。4.生成相关问。代码示例:既然指令有示例(快速排序),我可以包括一个分治算法示例,如归并排序。数学表达式:如果有,如时间复杂度,使用$...$或$$...$$。例如,归并排序时间复杂度$O(n\logn)$。最终响应结构:-开头:解释分治算法-主体:提供资源建议和搜索提示。-结尾:生成相关问。</think>### 分治算法 C++ PDF 资料查找指南 您好!您想查找或下载关于分治算法(Divide and Conquer)的C++版PDF资料,特别是针对2021.02.04的版本。分治算法是一种核心算法设计策略,通过将问分解为更小的子问、递归求解,再合并结果来解决复杂问,如归并排序、快速排序等。在C++中实现时,常结合STL模板和递归技巧[^3]。我将一步步帮助您解决问,并提供真实可靠的资源建议。请注意,我无法直接提供下载链接(受限于AI功能),但会指导您如何高效搜索和获取相关PDF资料。 #### 1. **理解分治算法基础** - 分治算法将问分为多个相似子问(通常递归求解),然后合并结果。例如,归并排序的时间复杂度为$O(n \log n)$,其中$n$是输入大小。 - 在C++中,关键点包括: - 使用递归函数处理子问- 利用STL容器(如`vector`)进行数据存储和操作[^2]。 - 基本模板: ```cpp // 示例:归并排序的C++分治实现 #include <vector> using namespace std; void merge(vector<int>& arr, int left, int mid, int right) { vector<int> temp; int i = left, j = mid + 1; while (i <= mid && j <= right) { if (arr[i] <= arr[j]) temp.push_back(arr[i++]); else temp.push_back(arr[j++]); } while (i <= mid) temp.push_back(arr[i++]); while (j <= right) temp.push_back(arr[j++]); for (int k = 0; k < temp.size(); k++) arr[left + k] = temp[k]; } void mergeSort(vector<int>& arr, int left, int right) { if (left >= right) return; // 基础情况 int mid = left + (right - left) / 2; // 分治点 mergeSort(arr, left, mid); // 递归左子问 mergeSort(arr, mid + 1, right); // 递归右子问 merge(arr, left, mid, right); // 合并结果 } ``` - 时间复杂度分析:分治算法的效率通常用递归树表示。设问规模为$n$,分解为$a$个子问,每个子问规模为$n/b$,则总时间复杂度为$T(n) = a T(n/b) + f(n)$,其中$f(n)$是合并开销[^1]。 #### 2. **PDF资料查找建议** 针对2021.02.04的特定日期,可能是指资料发布日期或更新时间。以下资源真实可靠,多数提供免费PDF下载或在线阅读。建议优先搜索以下关键词:**"divide and conquer algorithm c++ pdf"** 或 **"分治算法 C++ PDF 2021"**。 - **推荐资源(附搜索指南)**: - **《算法导论》(Introduction to Algorithms)**:经典教材,第4章详细讲解分治算法,并提供C++代码示例。2021年左右有更新版。您可在Google Scholar搜索书名 + "PDF" 下载,或访问[麻省理工学院开放课程](https://ocw.mit.edu/)获取讲义。 - **GeeksforGeeks 教程**:网站提供免费PDF下载(如["Divide and Conquer Algorithm"专](https://www.geeksforgeeks.org/divide-and-conquer/))。2021年版本包括C++实现和练习。直接搜索 "GeeksforGeeks divide and conquer c++ pdf" 即可找到。 - **LeetCode 算法库**:引用[1]中提到数据结构与算法之【深搜&宽搜递归&分治&剪枝回溯】篇,LeetCode有分治专(如问 "215. Kth Largest Element in an Array")。访问[LeetCode官网](https://leetcode.com/),搜索 "divide and conquer",下载其PDF题解(部分免费)。 - **大学课程讲义**:例如,斯坦福大学CS161课程(算法设计与分析)讲义涵盖分治算法C++实现。搜索 "Stanford CS161 lecture notes PDF" ,2021年材料通常可下载。 - **开源书籍**:如《C++ Data Structures and Algorithm Design Principles》有分治章节。在[GitHub](https://github.com/)搜索书名 + "PDF" ,或访问[Free Computer Books](https://freecomputerbooks.com/)免费获取。 - **搜索技巧**: - 使用Google高级搜索:输入 **"divide and conquer" filetype:pdf site:edu** 筛选学术资源。 - 日期过滤:在搜索工具中设置时间范围为 "2021年",或添加 "2021.02.04" 关键词查找特定版本。 - 验证可靠性:优先选择.edu或.org域名资源,避免版权问。如果资料涉及付费(如Amazon书籍),考虑合法渠道。 #### 3. **注意事项** - 分治算法在C++中高效实现依赖于递归优化和STL(如`vector`的迭代器)[^2]。如果资料太旧(2021年),注意C++标准更新(如C++17/20),确保代码兼容性。 - 数据结构和算法是相辅相成的,分治算法常用于树结构、排序等场景[^3]。结合引用[1]的刷建议,实践算法(如归并排序)能加深理解。 - 如果您需要具体代码调试或扩展,欢迎提供更多细节,我可以协助分析!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值