![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c的学习之路
文章平均质量分 71
桂月二四
这个作者很懒,什么都没留下…
展开
-
单调栈的应用
单调栈,顾名思义,就是存放的元素是单调的栈。单调栈主要是用来计算某个数左边/右边第一个比它小/大的数,基本上所有单调栈的题都是用到单调栈的这个功能。下面以计算某个数左边第一个比它小的数为例,如果是暴力,对于一个数而言,复杂度是可以接受的,但是倘若要对一个数组所有的数字都计算左边第一个比他小的数呢?于是要利用单调栈。观察一串序列 3 9 7 4 5 我们要计算每个数左边第一个比他小的数(没有则输出-1) ,显然,第一个数的答案是-1,将3压入单调栈。计算数字9 时,我们发现单调栈的原创 2021-07-28 21:15:31 · 1058 阅读 · 1 评论 -
Divide by Zero 2021 and Codeforces Round #714 (Div. 2) ABC题解
A. Array and Peaks题目大意:寻找一个n的排列,使得这个排列有k个峰值。思路:从i=2每隔两个数放置一个当前没有放的最大值,在放k个之后就停止(如果不足k个就输出-1)。接着继续从i=1开始,没有放置数字的位置接着放置当前没有放的最大值。#include <iostream>#include <unordered_map>#include <cstring>using namespace std;typedef long long ll;u原创 2021-04-12 14:47:38 · 1244 阅读 · 2 评论 -
Problem E Wormhouse题解
题意:给定一个欧拉回路(即经过所有边的一条回路),计算另一条欧拉回路,要求这条回路的字典序要大于给定的回路。字母m的含义:边数,所以要读入m+1个数(每两个数字之间组成一条回路)思路:dfs就完事了。下面是我在oj’上提交的代码,debug的时候一顿乱改,加了很多冗杂的东西。。提几点:(不想看的话请移步文章末尾)1.代码采用邻接矩阵(mp)存图(因为n不大)2.check用来检查最后生成的路径是否与原来一致,如果一致则要舍弃3.如果去掉okk这一个东西,那么这个代码可以求出所有符合题意的路径,原创 2021-02-16 00:12:44 · 208 阅读 · 4 评论 -
dp 部分和问题及其扩展
**一.部分和问题**给定整数 a1、a2、…、an,判断是否可以从中选出若干数,使它们的和恰好为 k。首先,我们定义dp数组 dp[i][j] 代表使用前i个数字能否组成j这个数字其次,我们发现dp[i][j] 是可以由dp[i-1][j-a[i]] 推出的,因此我们由状态转移方程 dp[i][j] |= dp[i-1][j-k* a[i] (k=0,1 且 j>=k*a[i[)初始化:dp[0][0] = 0;#include <bits/stdc++.h>原创 2021-01-24 16:17:05 · 883 阅读 · 0 评论 -
dfs基础介绍以及 Lake counting
点此打开题目Lake counting(POJ)深度优先搜索:从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态如此不断重复,最终得到解。例:给定整数a1,a2,…,an,判断师范可以从中选出若干个数,使他们的和恰好为k。利用dfs的做法是穷举出每个数是否参与了运算,算法复杂度为O(2^n)白书P31页#include <iostream>using namespace std;int a[100];int n,k;int dfs(in原创 2020-09-28 17:03:20 · 180 阅读 · 0 评论 -
c学习之单向链表的删除与清除操作
我们尝试用for循环,来搜索链表中的某个元素。在搜到数据的同时能否将其删除呢?链表删除的原理:如图所示,只需将待删除节点的上一个节点指向下一个节点即可(部分代码如下)scanf("%d",&number); Node *p,*q; //删除某个元素 for(q = NULL,p = list.head; p ; q=p,p = p->next) { if(number == p->value) { if(q == NULL) list原创 2020-09-12 17:00:20 · 482 阅读 · 0 评论 -
初学者的链表学习
今天学习了翁恺老师《C语言程序设计》14.2课 链表,这是对上一课可变数组的优化。何为链表?就是在每一个数据的后方放置一个指针,链接下一个数据…每个数据和指针合称为节点(最后一个节点的指针为NULL)当需要加入新数据时,只需新建一个节点,并将已有的最后一个节点的指针连接到新的节点上。这是基础存数据的代码#include <stdio.h>#include <stdlib.h>#include "node.h"typedef struct _node{ int valu原创 2020-09-12 16:39:42 · 218 阅读 · 0 评论 -
c语言学习之可变数组
链表今天学习了中国大学mooc上翁恺老师《C语言程序设计》的第14课链表。在学习链表之前,老师讲解了普通的可变数组的实现。前奏:可变数组的实现(有缺陷)首先定义一个结构体,内部存在一个指针和存放大小的变量typedef struct{ int *array; int size; }Array;其次明确目标,对数组所需的操作有:创建 丶清除(释放内存) 丶显示大小 丶访问和赋值 丶扩大这几个功能函数申明如下:#define BLOCK 20Array array_create(int init原创 2020-09-11 17:21:40 · 3037 阅读 · 0 评论