- 博客(301)
- 收藏
- 关注
原创 C - The Domino Effect(dfs+回溯)
一组标准的双六多米诺骨牌包含28块骨牌(称为骨头),每个骨牌使用类似骰子的点子显示从0(空白)到6的两个数字。28块独特的骨骼由以下PIP组合组成一组中的所有双六个多米诺骨牌都可以布置成7×8的像素网格。每个布局至少对应一张多米诺骨牌的“地图”。地图由相同的7×8网格组成,用适当的骨骼编号替换该骨骼上出现的pip编号。PIP的7×8网格显示示例和相应的骨骼编号地图如下所示。编写一个程序,分析一组标准多米诺骨牌的任何7×8布局中的PIP模式,并生成一张地图,显示所有多米诺在该集中的位置。......
2022-08-01 16:33:04
550
原创 区间和 离散化
接下来,进行mm次询问,每个询问包含两个整数ll和rr,你需要求出在区间[l,r][l,r]之间的所有数的和。在求区间和的时候,我们可以直接想到用前缀和的思想去实现,我们去查找alls中的x的下标的时。离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。原数据{100,200},{20,50000},{1,400};处理后1,3,4,2;处理后{3,4},{2,6},{1,5};...
2022-07-30 22:06:04
359
原创 gergovia的交易tijie
直线上有nn个等距村庄,每个村庄要么买酒,要么卖酒。设第ii个村庄对酒的需求为AiAi(−1000⩽Ai⩽1000−1000⩽Ai⩽1000),其中Ai>0Ai>0表示买酒,Ai
2022-07-30 11:51:32
146
原创 洛谷P2670扫雷游戏
在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。依次遍历每一个位置,然后判断8个方向上有几个雷,将雷的数量存在另一个数组中,最后输出判断是不是雷,不是雷就输出数组中存放的数据。注一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。NOIP2015普及组T2。...
2022-07-30 10:21:27
1415
原创 Ideal Path(UVA - 1599)
给定一个nn个点mm条边的无向图,每条边上都涂有1种颜色。求点11到点nn的一条路径,使得经过的边数最少,在此前提下,经过边的颜色序列最小。输入保证至少存在一条连接11和nn的道路。本题使用了两次bfs,从终点开始的bfs记录每个节点到终点的最短距离,从起点开始的bfs记录颜色字典的最小序,数据使用邻接表存储图存储边的编号,同时用数组下标表示边的编号。从起点开始的bfs要用到第一次bfs的结果。对于bfs访问的标记。...
2022-07-23 22:15:14
292
原创 B - Krypton Factor(dfs+回溯法)
如果一个字符串包含两个相邻的重复子串,则称它为“容易的串”,其他的串称为“困难的串”。例如,BB、ABCDACABCAB、ABCDABCD都是容易地串,而D、DC、ABDAB、CBABCBA都是困难的串。输入正整数n和L,输出由前L个字符组成的、字典序第k小的困难的串和该串的长度。例如,当L=3时,前7个困难的串分别为A、AB、ABA、ABAC、ABACA、ABACAB、ABACABA.以两个0最为结束输入的标志。由于这样的序列可能很长,请将其分成由四个字符组成的组,用空格分隔。...
2022-07-23 20:23:23
231
原创 Dijkstra 求最短路
接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出−1。给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。按题目描述,总共是n个点,m条边,n,m的数据范围大于100倍,属于。每次都要依次更新每一个点到相邻的点的路径,并且取最小值。输出一个整数,表示1号点到n号点的最短距离。,并且图中所有边权均为正值,所以我们可以使用。......
2022-07-23 17:05:37
362
原创 Prime Ring Problem
1:用最简单原始的方法,将数字进行排序,然后进行判断对或者错。(由于数字过于庞大,在12时,代码运行已经很慢了,到16时无法运行。不信的同学可以去试试!)2:使用回溯法,从1开始一个一个进行试验,如果可以就向下进行,拿没有用过的数字进行试验,如果无法成功,则进行回溯。是一个递归的过程。运行的速度会快很多。...
2022-07-23 16:24:15
181
原创 A - Play on Words
类似于小时候玩的一笔画问题,我们把输入的每一组单词看成图的一个边,首尾字母看成是一个点,此题即是一道判断欧拉通路的问题了,因为需要判断联通,可以用并查集解决。
2022-07-17 01:39:28
249
原创 UVA340 Master-Mind Hints
大致意思就是先给出一个密码,然后再给出几个猜测的密码,算出每个猜测密码和正确密码数字强匹配和弱匹配的个数。当猜测密码的数字和正确密码中的数字数值相同且所处位置相同时即判断为强匹配,当猜测密码的数字和正确密码中的数字数值相同但所处位置不同时则判断为弱匹配。......
2022-07-16 21:03:11
267
原创 A - Trees on the level(树的层序遍历)
主要使用了c++STL中的set。用排序的方法对输入进行排序,根据字符的长度以及相同长度的字典序从小到大,正好对应树从上到下。1.某些节点无法从根节点出发到达。2.开始处理数据时都需要清空路径。...
2022-07-16 20:02:15
282
原创 P1004 [NOIP2000 提高组] 方格取数
某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大。...
2022-07-14 21:09:53
751
原创 UVA - 12096 The SetStack Computer
主要使用了C++STL中set、stack、map的相关使用,用map将不同的集合映射到ID中,stack表示整个栈,思路参考了算法紫书P116的相关讲解。
2022-07-14 20:47:42
177
原创 C - Matrix Chain Multiplication(栈的应用)
给定一个矩阵相乘的表达式,计算矩阵相乘的次数。先输入一个整数N,然后输入N个矩阵的信息,矩阵名称,矩阵的行列数。接着给出一些表达式,输出表达式所需的相乘次数,如果表达的计算因矩阵不匹配而导致错误,则输出“error”。用map来保存每个矩阵名到矩阵行列的映射关系,对于输入的表达式,如果长度为1则直接输入0,否则依次遍历整个表达式,遇到‘(’和大写字母直接入栈,遇到‘)’计算栈顶两个矩阵的相乘次数,依次累加,并将一个新的矩阵入栈(新矩阵行列由第一个矩阵的行和第二个矩阵的列构成,名称为当前遍历的序号i)。
2022-07-13 22:21:57
323
原创 c++ 卡特兰数
设出栈的所有可能性为 f(n) 我们假定最后出栈的元素是k,那么在k之前的元素都已出栈,那么前面就有f(k-1)种,如果在k之后的元素就有f(n-k)种。那么就有总共就有f(k-1)*f(n-k)种。Catalan递归式!!!!令 f(0)=1,f(1)=1f(n) = f(0)f(n-1) + f(1)f(n-2) + …… + f(n-1)f(0)下面给出一道经典卡特兰问题 :栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即 pop(从栈顶弹出
2022-07-05 09:17:18
3504
原创 STL标准模板库(Standard Template Library)一周学习总结
在对STL的学习过程中,我对于容器有了一定的基础认识,容器分为了8个部分+2个操作。
2022-07-04 23:59:35
197
原创 七月第一周
骑士移动题目描述:写程序,计算骑士从一个位置移动到另一个位置所需的最少移动次数。骑士移动的规则如下如所示。每一次跳动,都可以有八种选择,经过多次正确选择后可以找到一个最近的路程。算法设计:这是一个求最短距离的问题,可以使用queue进行广度优先搜索步骤,现将起点放入队列,如果队列不空,则对头出对,否则扩展8个方向,如果找到目标,则立即返回步长+1并放入队列,标记其已访问,如果骑士的当前位置为(x,y),则移动时当前位置坐标加上偏移量即可。输入:380 07 0 1000 030 50101
2022-07-04 10:10:15
118
原创 浴谷P1141 01迷宫
题目描述有一个仅由数字00与11组成的n \times nn×n格迷宫。若你位于一格00上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格11上,那么你可以移动到相邻44格中的某一格00上。你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。输入格式第11行为两个正整数n,mn,m。下面nn行,每行nn个字符,字符只可能是00或者11,字符之间没有空格。接下来mm行,每行22个用空格分隔的正整数i,ji,j,对应了迷宫中第ii行第jj列的一个格子
2022-02-23 21:30:39
381
原创 复数除法算法
问题描述已知两个复数a和ba = a.rmz + ja.imzb = b.rmz + jb.imz求这两个复数的商cc = c.rmz + jc.imz = a / b函数名:c_comp_divide.c建模思想(1)计算除数的模的平方(2)调用复数乘法的算法计算(3)最终计算结果为代码#include<stdio.h>#include<stdlib.h>#include<math.h>#in
2022-02-21 00:00:00
1129
原创 LeetCode 1020.飞地的数量(dfs)
题目传送门:1020.飞地的数量题目详情:给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。示例 1:输入:grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]输出:3解释:有三个 1 被 0 包围。一个 1
2022-02-20 22:28:44
437
原创 poj2432环游世界
问题描述: 多年来,FJ在世界各地结交了大量的农民朋友。由于他有一段时间没有拜访来自英格兰的“Farmer Ted”和来自荷兰的“Boer Harms”,他很想去拜访他们。 他知道他的每个世界各地的朋友所居住的农场的经度。该经度是描述农场在地球上的位置的角度(0..359 范围内的整数),我们将其视为圆形,而不是更复杂和传统的球形表示。除了明显的不连续性外,在这个圆圈上顺时针行驶时,经度会增加。 FJ 计划乘飞机去拜访他的 N (1 <= N <...
2022-02-20 17:06:23
403
原创 LeetCode10. 正则表达式匹配
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。示例 1:输入:s = "aa", p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa", p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前...
2022-02-20 16:50:59
205
原创 百练4152:加法表达式
点此查看原题题解(递归)详细思路见代码块#include<iostream>#include<string>using namespace std;long long num[1000][1000]; //num[i][j]存第i位到第j位组成的数字大小 long long minn(int m,int n); //表示在n个数中插入m个加号的最小值 int main(){ int m; while(cin>>m) { string
2022-02-19 19:23:05
263
原创 力扣 19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= s...
2022-02-18 16:28:22
213
原创 方块分割(dfs)、寒假作业(dfs+剪枝)
1.方块分割题目描述给定一个6×6 的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。如下就是三种可行的分割法。试计算: 包括这 3 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。思路:这是一道搜索题,首先切割线一定会经过中心点,因此我们可以从中心点(3,3)开始搜索,另外还需要注意的是,题目要求旋转对称属于同一种分割法,因为结果是关于中心对称的,搜索出来的个数除以4即可,还需注意关于中心对称的两个点,在标记时对称的点也要
2022-02-18 14:51:18
1279
原创 C++PrimerPlus 学习笔记 | 第十一章 使用类 | 4 矢量类的补充 & 5 类的自动转换和强制转换 & 6 总结
多种方法表示方式和类可以用不同但等价的方式表示的量,类似于前面的货币,黄金的用各种货币表示,类非常适用于在一个对象中表现实体的不同方面,首先在一个对象中存储多种表示方式,然后编写类函数,使得当以任意一种方式赋值当时候都能自动更新所有的量,也可以如上所示,只存储一种表示方法,在需求其他表示方式的时候进行转换。类允许从本质上而不是从表达方式看一个量为矢量类重载算术运算符如果方法通过计算得到一个新的类对象,则应该考虑是否应该通过构造函数建立,这种方法不仅可以避免麻烦,也可以保证类对象的正确建立/因为元素符
2022-02-17 15:28:17
432
原创 C++PrimerPlus 学习笔记 | 第十一章 使用类 | 2.友元 & 3.运算符重载使用成员还是非成员函数 & 4. 矢量类
友元C++控制对类私有部分发的访问,但是在有些时候这些控制过于严格,以至于不适用于特定的编程问题,在这种情况下C++提供类另外一种形式的访问权限友元友元函数友元类友元成员函数通过让函数成为友元可以让他拥有与类成员相同的访问权限,下面主要介绍友元函数。需要注意的是友元函数仍是普通函数,不是成员函数所以没有this指针!!!。为什么需要友元函数,我们不妨来思考下述,问题存在一个时间类,需要重载*运算符,让其内部的时间可以按照给定的系数q,倍乘如果重载了乘法运算符,这个主要差异在两者类型
2022-02-17 13:30:06
526
原创 C++PrimerPlus 学习笔记 | 第十一章 使用类 | 1.运算符重载
运算符重载运算符重载是一种形式的C++多态,运算符重载将前面的函数重载重载运用到运算符上,允许赋予C++运算符多种含义。实际上许多C++(也包括C语言)运算符都已经被重载。C++根据操作数的数量和类型确定使用那种运算符。C++允许将运算符重载扩展到用户自定义的类型。例如相加两个数组一般写法是for (int i = 0; i < size; i++){ dest[i] = s1[i] + s2[i];}但是通过重载运算符可以写成dest = s1 + s2;这种简单的加法隐藏
2022-02-17 11:00:15
413
原创 复数乘法算法
问题描述已知两个复数a和ba = a.rmz + ja.imzb = b.rmz + jb.imz求这两个复数的乘积cc = c.rmz + jc.imz函数名:c_comp_product.c建模思想(1)计算变量.p = a.rmz * b.rmzq = a.imz * b.imzs = (a.rmz + a.imz)(b.rmz + b.imz)(2)计算c.rmz = p - q , c.imz = s - p - q(3)最终计算结果为.
2022-02-16 20:54:30
562
原创 C++PrimerPlus 学习笔记 | 第十章 类和对象|7 抽象数据类型 8 总结
抽象数据类型前面定义的carcarcar类非常具体,程序常常通过定义类表达更加通用的概念,就抽象数据类型ADT的而言,使用类是非常好的概念,顾名思义ADT以通用的方式来描述数据类型,而没有引入语言和实现细节,例如栈。我们不妨以栈为例,来看看如何描述一个抽象数据类型具有的操作可以创建空栈可以讲数据项添加到栈顶可以讲数据项从栈顶删除可以查看栈是否填满可以查看栈是否为空来看下面实例typedef int Item;class Stack{private: enum class
2022-02-15 10:32:31
338
原创 C++PrimerPlus 学习笔记 | 第十章 类和对象|4 this 指针 & 5 对象数组 & 6 类作用域
thisthisthis指针假设我们要创建一个创建汽车比较函数,通过一个类对象调用,给定比的对象,返回价高者的引用,原型如下const car & higherPrice(const car & c) const;该函数会隐式的访问的一个对象,就是调用这个函数的类对象,会显式访问一个对象,就是函数形式参数的那一个对象,那么问题来了如何返回这个隐式访问的对象呢?看下面的实例const car & higherPrice(const car & c) const{ r
2022-02-15 10:10:12
649
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人