Siumai's Blog

噫...
私信 关注
Siumai
码龄2年

此人不懒,但什么都不想写

  • 33,192
    被访问量
  • 217
    原创文章
  • 40,195
    作者排名
  • 21
    粉丝数量
  • 于 2018-11-20 加入CSDN
获得成就
  • 获得228次点赞
  • 内容获得41次评论
  • 获得83次收藏
荣誉勋章
兴趣领域
  • #人工智能
    #神经网络#TensorFlow#视觉/OpenCV#Python#算法#机器学习#PyTorch#图像处理#深度学习
TA的专栏
  • pytorch
    1篇
  • 深度学习
    8篇
  • Python
    13篇
  • Linux
    4篇
  • AI之路
  • PAT B
    39篇
  • PAT A
    140篇
  • 算法题
    5篇
  • C++学习
    2篇
  • 数据结构
    12篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

[n, h, w, c]转[n, c, h, w]

由于Pytorch默认图片数据格式为[n, c, h, w]、rgb,因此若数据集为[n, h, w, c]格式时需要进行转换:# 为便于处理,先转为numpy数组x = np.array(trainset['train_set_x'])x.shape, type(x)# ((1080, 64, 64, 3), numpy.ndarray)x = x.transpose([0, 3, 1, 2])x = t.as_tensor(x)x.size()# torch.Size([1080, 3
原创
233阅读
0评论
0点赞
发布博客于 8 月前

Python爬虫常用库(三)selenium

一、声明浏览器对象from selenium import webdriveroption = webdriver.ChromeOptions()option.add_argument("--headless")'''Chrome无头模式'''browser = webdriver.Chrome(options = option)二、访问页面 Chrome().get(url...
原创
93阅读
0评论
0点赞
发布博客于 8 月前

Ubuntu个人美化方案

一、安装gonome-tweak-toolsudo apt-get install gnome-tweak-tool二、安装chrome-gnome-shellsudo apt-get install chrome-gnome-shell三、在浏览器中打开https://extensions.gnome.org/extension/19/user-themes/,并打开网页右侧的按钮四、在添加链接描述中选择喜欢的拓展插件安装,本人安装了dash to dock。五、安装arc主题# 安装a
原创
88阅读
0评论
0点赞
发布博客于 8 月前

Ubuntu路径

~为家目录./为当前目录/为根目录
原创
38阅读
0评论
0点赞
发布博客于 8 月前

深度学习一般工作流程

一、定义问题,收集数据集。注意确保数据集特征丰富程度足以作出预测二、定义模型预测性能指标如:平衡分类问题常用精度、接受者操作特征曲线下面积;不平衡分类问题常用精度和召回率;标量回归常用平均绝对误差(MAE)等等。三、确定模型评估方式如:留出法、K折交叉验证、乱序重复K折交叉验证四、数据预处理预处理目标:1、特征值为张量数据2、特征取值较小(0-1区间或正负1区间)3、特征非异质数据4、特征缺失处理为0五、搭建模型1、确定激活函数、损失函数问题类型输出层激活函数损失函数
原创
830阅读
2评论
1点赞
发布博客于 10 月前

模型评估:训练、验证、测试

一、数据集的划分(一)学习目标在理想情况下,通过机器学习,我们希望可以获得一个拥有出色泛化能力的模型。即能够在前所未见的数据样本上举一反三,正确分析预测。(二)假设1、全部数据集作为训练集只要选取模型适当,在若干轮迭代轮次后一定能够得到在训练集上性能优越的模型。但其泛化能力不得而知。2、划分为训练集和测试集增加了测试集部分,在训练集上训练模型,在测试集上评估模型并作为泛化能力的指标。但总是基于同一个测试集进行参数调整,即使可以进一步得到在测试集上表现优秀的模型,但模型在测试集上过拟合不可避免(
原创
415阅读
0评论
0点赞
发布博客于 10 月前

Ubuntu18.04+tensorflow2.1.0+pytorch1.5环境搭建

一、安装ubuntu18.04 LTS(一)下载ubuntu系统映像Ubuntu 18.04.4 LTS (Bionic Beaver)(二)制作系统安装盘推荐工具:rufus(三)系统安装注意:一定将bios设置中安全启动选项关闭!(四)后续1、ubuntu更换阿里云镜像源2、二、深度学习环境搭建(一)GPU环境搭建参考Tensorflow官方GPU配置指南进行搭建。1、卸载旧显卡驱动及相关组件# 终端输入:sudo apt-get purge nvidia*sudo ap
原创
713阅读
0评论
1点赞
发布博客于 10 月前

jupyter notebook使用技巧

1、代码自动补全(1)安装库python -m pip install jupyter_contrib_nbextensions(2)执行jupyter contrib nbextension install --user --skip-running-check(3)配置进入jupyter notebook;在Nbextensions中勾选Hinterland和Table of Contents(4)按Tab使用自动补全2、简单方法(函数)功能提示(1)编写函数,括号留白(2)
原创
88阅读
0评论
0点赞
发布博客于 10 月前

解决Ubuntu18下Fcitx无法super+space切换

设置-设备-键盘->禁用"切换至上个输入源"“切换至下个输入源”
原创
290阅读
0评论
0点赞
发布博客于 1 年前

深度神经网络中的梯度检验与Inverted dropout实现

import numpy as npimport matplotlib.pyplot as pltimport scipy.io as siodef load_dataset(): data = sio.loadmat("/home/yan/下载/datasets/data.mat") return data["X"].T, data["y"].T, data["Xval"...
原创
73阅读
0评论
1点赞
发布博客于 1 年前

PAT A 2019.9 7-4 Dijkstra Sequence (30分)

一、题目概述验证给定的K个序列是否为Dijkstra序列二、思路对于每个序列,执行dijkstra算法求得单元最短路径距离。若为Dijkstra序列,则序列中元素按照该距离非降序排列。三、代码#include <cstdio>#include <vector>using namespace std;#define INF 0x7FFFFFFFint ma...
原创
150阅读
0评论
0点赞
发布博客于 1 年前

PAT A 2019.9 7-3 Postfix Expression

一、题目概述依据给定语法树,输出后缀表达式二、思路对语法树后序遍历输出单元数据。注意:单枝树按照先序NLR顺序输出数据三、代码#include <iostream>#include <vector>#include <string>using namespace std;vector<int> lchild(21), rchild...
原创
52阅读
0评论
0点赞
发布博客于 1 年前

PAT A 2019.9 7-2 Merging Linked Lists (25分)

一、题目概述给定非空单链表L1, L2,知其一结点数时另一链表的两倍或以上。要求将短链表逆置,插入长链表。二、代码(PAT暂未收录,不保证正确)#include <cstdio>#include <vector>#include <algorithm>using namespace std;struct node{ int data, add...
原创
237阅读
0评论
1点赞
发布博客于 1 年前

PAT A 2019.9 7-1 Forever (20分)

一、题目概述存在整数A, 满足以下条件:1、A共K位2、A各位数字和为m3、A + 1各位数字和为n4、m和n的最大公因数为大于2的素数要求:依据给定K和m,输出所有满足条件的n和A。输出按照n和A升序二、思路设A各位数字之和为m,则A + 1各位数字之和n有以下可能:1、A末尾数字不是9,显然:n = m + 12、A尾部有k位连续的9:n = m + 1 - k * 9归...
原创
40阅读
0评论
1点赞
发布博客于 1 年前

吴恩达Course 1 - 神经网络和深度学习 - 第四周作业 - 深层神经网络

一、爬取百度图片数据集import requestsimport jsonbase_url = "http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=" \ "result&queryWord=%E7%8C%AB&...
原创
210阅读
0评论
1点赞
发布博客于 1 年前

爬取百度图片450张猫图片

import requestsimport jsonbase_url = "http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=" \ "result&queryWord=%E7%8C%AB&cl=2&lm...
原创
191阅读
0评论
1点赞
发布博客于 1 年前

吴恩达Course 1 - 神经网络和深度学习 - 第三周作业 - 带有一个隐藏层的平面数据分类

import numpy as npimport matplotlib.pyplot as pltimport timedef load_planar_dataset(): np.random.seed(1) m = 400 # number of examples N = int(m/2) # number of points per class D = ...
原创
91阅读
0评论
1点赞
发布博客于 1 年前

吴恩达Course 1 - 神经网络和深度学习 - 第二周作业 - 具有神经网络思维的Logistic回归

import numpy as npimport matplotlib.pyplot as pltimport h5py载入数据集函数:载入数据集;返回train_x, train_t, test_x, test_y, ;def load_dataset(): train_set = h5py.File("/home/yan/下载/assignment/datasets/trai...
原创
91阅读
0评论
1点赞
发布博客于 1 年前

爬取百度云500张验证码图片

from selenium import webdriverfrom selenium.webdriver.common.by import Byimport timeimport requestsdef save(url, path): response = requests.get(url) with open(path, 'wb') as img: ...
原创
213阅读
0评论
1点赞
发布博客于 1 年前

CSS选择器

选择器例子例子描述CSS.class.intro选择 class=“intro” 的所有元素。1#id#firstname选择 id=“firstname” 的所有元素。1**选择所有元素。elementp选择所有 < p > 元素。1element,elementdiv,p选择所有 < div &g...
原创
31阅读
0评论
1点赞
发布博客于 1 年前

Python爬虫常用库(三)pyquery

一、初始化(一)html代码初始化from pyquery import PyQuery as pqhtml = '''<div> <ul> <li class="item-0">first item</li> <li class="item-1"><a href="link2....
原创
44阅读
0评论
1点赞
发布博客于 1 年前

Python爬虫常用库(三)beautifulsoup

一、解析库解析器使用方法优势劣势lxml HTML解析库Beautifulsoup(markup, “lxml”)速度快、文档容错能力强需要安装C语言库lxml XML解析库Beautifulsoup(markup, “xml”)速度快、唯一支持XML的解析器需要安装C语言库html5libBeautifulsoup(markup, “html5...
原创
88阅读
0评论
1点赞
发布博客于 1 年前

Python爬虫常用库(二)正则表达式

一、测试站点:正则表达式在线工具二、语法模式描述^匹配字符串的开头$匹配字符串的末尾。.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。[…]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。re*匹配...
原创
50阅读
0评论
1点赞
发布博客于 1 年前

Python网络爬虫实战练习:爬取豆瓣图书信息

一、注意事项1、文件名尽量使用英文,避免出现编码问题2、含中文的文件写入,注意标注编码,如:with open(r"C:\Users\10335\Desktop\response.txt", 'w', encoding = "utf-8") as f: f.write(html) f.close()3、若长时间得不到输出,考虑正则表达式的构造是否捕捉效率不高二、代码实现...
原创
137阅读
0评论
1点赞
发布博客于 1 年前

技巧:机试常用算法

一、素数判断:1、直接判断 o(n^1/2)bool isprime( int n ){ if( n < 2 ) return false; for( int i = 2; i <= sqrt(n); ++i ) if( n % i == 0 ) return false; return true;...
原创
91阅读
0评论
1点赞
发布博客于 1 年前

Python爬虫常用库(一)urllib、requests

一、urllib1、请求 urillib.reques.urlopen(url = url, data = post_data, [time_out]*)(1)get类请求from urllib import requestresponse = request.urlopen("http://www.baidu.com")print(response.read().decode("utf...
原创
169阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1073 Scientific Notation (20分)

### 一、题目概述输出给定依照科学计数法规范表示的数字### 二、思路数符:若为'-'则直接输出'-';有效数位:仅将数字部分保存为字符串;阶码:保存为整形;小数点及是否补零的确定:(1)阶码e < 0:数字串前补|e|个'0',下标1处插入小数点'.';(2)阶码0 <= e < 数字有效位数 - 1数字串下标1 + e处插入小数点'.'(3)阶码e >= 数字有效位数字串尾补e - 数字有效位 + 1个'0'### 三、代码```cpp#include <cstd
原创
31阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1068 Find More Coins (30分)

一、题目概述依据给定钱币面值,找出总金额恰为给定M的最小钱币组合。二、思路将货币面值降序排序;构造降维动态规划数组dp[],dp[j]为总面值和不多于j的最大总面值和,i从1至N迭代,每次求出前i个货币的dp值。最终若dp[M] != M,即无法找到总面值恰为M的钱币组合,无解。若有解,根据数组ans[i][j]记录的更新情况输出最小组合。三、代码#include <cstd...
原创
32阅读
0评论
1点赞
发布博客于 1 年前

技巧:C/C++常用库函数

一、map相关1、map定义时添加参数 less<>/greater<>可以设置map内排序为升降序;2、map.find(val)返回迭代器,失败是迭代器指针指向map.end()二、algorithm库1、max(a, b), min(a, b), abs(val)2、swap(a, b)3、reverse(it1, it2)逆转序列4、sort(it1,...
原创
92阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1132 Cut Integer (20分)

一、题目概述略;二、思路利用好< string >中的substr()函数。注意:除数为0输出"No"。三、代码#include <iostream>#include <cstdlib>#include <string>using namespace std;int main(){ int N; cin >...
原创
35阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1124 Raffle for Weibo Followers (20分)

一、题目概述依据给定转发用户名单及抽奖机制,筛选中奖者。抽奖机制:第S个用户为第一个中奖用户, 之后每N个用户为中奖用户。二、思路设当前用户是第i个转发用户, 第S个用户是首个中奖用户,则若(i - S)是N的非负整数倍,则当前用户中奖(若非已中奖用户)。若当前用户中过奖,令S加一即可实现跳过。用map作为存储已中奖用户名单的数据结构,判断用户是否已经中过奖。三、代码#include...
原创
115阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1121 Damn Single (25分)

一、题目概述升序输出无配偶或配偶未出席的客人ID。二、思路略;三、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;int main(){ int N, M; vector<int> spouse(100000, ...
原创
42阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1119 Pre- and Post-order Traversals (30分)

一、题目概述判断给定先序、后序遍历序列是否可以唯一确定一个二叉树,并输出所确定的二叉树的中序遍历序列。二叉树不唯一时,构造可确定的任一二叉树中序序列。二、思路判断是否可以唯一确定:二叉树先序序列的第二个元素是左子树的根元素(若有左子树),后序序列的倒数第二个元素是右子树的根元素(若有右子树)。当先序第二、后序倒数第二个元素相同时可知,该元素即可为左子树的根元素,也可为右子树的根元素,二叉树不...
原创
79阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1118 Birds in Forest (25分)

一、题目概述依据给定信息,求解:(1)树的数量;(2)鸟的数量;(3)判断任两只鸟是否在同一个树上。信息受以下规范约束:(1)每张照片上的鸟都在同一棵树上(可能有多张照片描述同一棵树);(2)鸟编号连续,从1开始,且所有鸟都在照片中出现。二、思路(1)输入的同时统计鸟的数量。(2)鸟和照片作为结点构造无向图,则每个连通分量就是一棵树,树的数量即连通分量数。(3)为判断鸟是否属于同一...
原创
43阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1117 Eddington Number (25分)

一、题目概述依据给定骑行记录计算Eddington number——E。E满足在N条记录中,有E天骑行超过E公里。二、思路按值降序排序,E取最后一个dist[i] > i的i。三、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;int ...
原创
35阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1115 Counting Nodes in a BST (30分)

一、题目概述依据给定数据序列构造BST,并求出BST底部两层结点数。二、思路1、经典的二叉排序树按序插入构造;2、层序遍历统计底部两层结点数底部两层结点数。三、代码#include <cstdio>#include <vector>#include <queue>#include <algorithm>using namespac...
原创
30阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1114 Family Property (25分)

一、题目概述依据给定个人房产信息、家族信息,统计:1、家族数量(有任一种血缘关系即属于同一家族);2、各家族的:家族代表(全家最小ID)、家族成员数、家族平均房产数、家族平均房产面积。二、思路无向图dfs统计。set作为数据结构存储所有id,实现id升序遍历,则家族遍历起点即家族代表id(最小号id)。三、代码#include <cstdio>#include <...
原创
42阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1113 Integer Set Partition (25分)

一、题目概述略二、思路排序即可三、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;int main(){ int N, diff = 0; scanf("%d", &N); vector<int>...
原创
30阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1112 Stucked Keyboard (20分)

一、题目概述依据给定串,及按键卡住的判定标准,输出可能卡住的按键,及正常输出的串。按键卡住的判定:若按键卡住,则每次输出都会输出k次。即该按键连续出现的次数一定是k的倍数。二、思路字符串以连续的字符段为单位处理时,有一种好用的方式:下标i从1到串尾+1位迭代,每次迭代处理前一位字符(str[i - 1]),可以正确处理到每个字符,不会漏掉易于出错的末尾字符处理。1、找出肯定没卡住的按键:...
原创
37阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1111 Online Map (30分)

一、题目概述求解两条路径:1、源点、汇点间最短距离路径,若路经距离相同,选择耗时更短者。2、源点、汇点间耗时最短路径,若路径耗时相同,选择路线上结点更少者。二、思路两次Dijkstra算法。代码量较大,注意不要出错。三、代码#include <cstdio>#include <vector>using namespace std;#define INF...
原创
87阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1110 Complete Binary Tree (25分)

一、题目概述若给定树为完全二叉树输出"YES"和最后一个结点下标,否则输出"NO"和根节点下标二、思路1、根节点的确定根节点一定不为任一结点的子树,则输入时记录每个结点是否为子树的状态。2、完全二叉树的判定对树层序遍历,若非完全二叉树,则一定存在某一层,该层两个结点间存在空结点。现象可以在队列中得到反映,即:若出队结点是空结点,且后续出队有非空结点,则不是完全二叉树。三、代码#in...
原创
108阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1109 Group Photo (25分)

一、思路1、排序:对N个人按照身高降序排序,身高相同者按字典序排序。2、按规则构造阵型:(1)确定每行人数 num = N / K;//num为该行的人数 if( !i )//第一行人数可能不同 num += N % K;(2)行的构造人们插入队列的顺序存在规律,即从下标num/2的位置开始,向两侧排列。i从1~num迭代,fl...
原创
33阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1108 Finding Average (20分)

一、思路1、测试点分析(1)测试点1:正确判断小数点是否非法(2)测试点2:合法元素总数为1时是否正确输出number(无s)。(3)测试点3:小数点出现在首位处是合法的。如:.95,95.2、判断(1)合法性判断: scanf("%s", str);//str保存输入字符串 sscanf(str, "%lf", &val);//字符串转doub...
原创
32阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1107 Social Clusters (30分)

一、题目概述依据给定N个用户的爱好,构造出一个社交网络,找到社交网络中的同好圈的个数,并降序输出各同好圈中的成员数。二、思路1、同好圈的示例:A的爱好:1, 3;B的爱好:3, 5;C的爱好:5, 6;显然:A、B是关于3的同好,B、C是关于5的同好。A、B、C组成了一个人同好圈,即使A、C没有共同爱好。2、解决方案构造无向图,统计连通分量数、各连通分量中用户结点数。标号范围[1...
原创
25阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1106 Lowest Price in Supply Chain (25分)

一、思路DFS遍历,到达底层进行价格分析。注意根供应商直接给出价格,不以倍率r涨价。二、代码#include <cstdio>#include <vector>using namespace std;int N, cnt = 0;double P, r, Min = 0x7FF0000000000000;vector<vector<int>...
原创
48阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1105 Spiral Matrix (25分)

一、题目概述要求:1、据给定N, 找到m、n使得m * n = N, 且m-n的值最接近0;2、使用N个元素构造m x n的螺旋矩阵, 元素降序。二、思路1、m、n的选择:n取不大于根号N,且能被N整除的最大值, m = N / n。 for( n = sqrt(N); N % n; --n ); m = N / n;2、矩阵的构造:width、height控制高度和...
原创
26阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1104 Sum of Number Segments (20分)

一、思路公式:sum +=a[i] * (i + 1) * (N - i);二、代码#include <cstdio>int main(){ int N; double sum = 0, temp; scanf("%d", &N); for( int i = 0; i < N; ++i ) { scanf(...
原创
37阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1103 Integer Factorization (30分)

一、题目概述给定正整数N、K、P, 将N划分为K个数的和,且每个数均为某数的P次幂。二、思路使用DFS探测所有可能的组合。1、找到因数的上界H,应满足 H^P<=N for( int i = 0; pow_P(i) <= N; ++i )//探测上界的同时,预存储将用到的所有值的P次方以俭省时间 val.push_back( pow_P(i) ); ...
原创
32阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1102 Invert a Binary Tree (25分)

一、题目概述对二叉树反转并输出层序、中序遍历序列。二、思路方法很多,可以建树时反转左右子树,也可以遍历时交换访问左右子树顺序。注意:1、正确读入换行符;2、寻找根节点:即不为任何结点的子树的结点。三、代码#include <cstdio>#include <queue>#include <vector>using namespace std...
原创
32阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1101 Quick Sort (25分)

一、思路若一个数是序列中左侧数的最大值和右侧数的最小值,则可作为枢轴。注意测试点2格式错误:若无符合要求的数,第二行输出空行。二、代码#include <cstdio>#include <vector>using namespace std;int main(){ int N; scanf("%d", &N); vector&...
原创
31阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1100 Mars Numbers (20分)

一、思路火星文转数字较为简单;数字专火星文注意:1、仅数字为0输出"tret";2、个位和十位均有输出才输出空格。二、代码#include <iostream>#include <cctype>#include <cstdio>#include <map>using namespace std;int main(){ ...
原创
33阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1099 Build A Binary Search Tree (30分)

一、题目概述依据给定二叉树结构,建立二叉排序树,并输出层序遍历序列。二、思路中序遍历建树,层序遍历输出;三、代码#include <cstdio>#include <vector>#include <algorithm>#include <queue>using namespace std;typedef struct{ ...
原创
21阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1098 Insertion or Heap Sort (25分)

一、思路模拟堆排序和插入排序的执行过程;插入排序模拟:第i轮排序后,前i个元素有序,其余元素位置顺序不改变。sort( ans.begin(), ans.begin() + i );//第i轮堆排序模拟:1、建堆 for( int i = N / 2 - 1; i >= 0; --i ) adjust( i, N );2、第i轮排序 s...
原创
19阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1096 Consecutive Factors (20分)

一、题目概述求某整数的最大连续因数序列。二、思路构造一个数值区间,len为区间长度, num为区间内数值的积,不断尝试区间内数值的积是否为因数。num为因数时,增加尝试的区间长度。难点:测试点6用例为一个大素数,i从2到N迭代会出现测试点超时。此时考虑分为N是素数与非素数两种情况:1、N非素数,则至少存在两个因数,若两个因数连续,则最大可能为根号N的上下界(设根号N不为整数,若为整数则...
原创
44阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1078 Hashing (25分)

一、思路Hash存储是元素关键字和存储位置存在映射关系,实现接近o(1)时间的访问效率的数据结构。hash表的构造有两个关键要素:散列函数H()和冲突处理方式。1、散列函数散列函数确定了一般情况下关键字的存储位置,本题使用的除留余数法:H(key)=key%TSize。如:Tsize(表长)为7时,H(7) = 7 % 7 = 0,即7存放在table[0]中。但若存入14,H(14)同...
原创
67阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1077 Kuchiguse (20分)

一、思路后向前寻找最长公共后缀二、代码#include <iostream>#include <string>using namespace std;int main(){ int N, min = 0; cin >> N; getchar(); string str[N]; for( int i = 0; ...
原创
100阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1075 PAT Judge (25分)

### 一、题目要求有N个学生,某次考试有K个问题,给出M条成绩记录,要求根据记录统计输出排名名单。不加入名单的条件:K个问题均未提交或未通过编译。成绩输出格式:未提交输出'-',提交且编译未通过成绩为零,其他成绩正常输出。### 二、思路设考生N位,科目K门:**1、构造数组**(1)flag[N + 1], 若考生i存在一门科目成绩有效即在区间[0, full_mark]内,则flag[i] = 1可以参与排名。(2)score[N + 1][K + 1], score[i][j] =
原创
36阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1074 Reversing Linked List (25分)

一、题目概述给定单链表,使每K个元素进行一次逆转,若剩余元素不足K个,不逆转二、思路1、利用algorithm库函数reverse(it1,it2)进行逆转;2、注意判断条件:仅i + K <=L.size()才执行逆转;3、测试点错误注意,给定结点中有不属于该链表的结点。三、代码#include <cstdio>#include <vector>#...
原创
30阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1072 Gas Station (30分)

一、题目概述给定N个居民区和M个加油站备选址,即各点间的距离。在M个油站备选址中找到最合适的一处。油站选址标准:1、N个居民区都在服务范围内。2、距最短距离尽可能的远。3、若有另一油站距居民区最短距离相同,选择距离居民区平均距离最短的。二、思路1、关于图的建立(1)存储为邻接矩阵无向图,居民区下标1~N,油站下标N + 1 ~ N + M;(2)用string读入居民区或油站的下...
原创
51阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1071 Speech Patterns (25分)

一、要点1、使用map<string, int>统计词的出现次数,然后取最值;2、注意cctype库中很多使用函数,如:isalnum()为字母数字、isdigit()为数字、isalpha()为字母、isupper()为大写字母、islower()为小写字母、toupper()转为大写字母、tolower()转为小写字母等等。3、读入单词部分: while( ( c =...
原创
131阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1070 Mooncake (25分)

一、思路月饼按单价降序销售。测试点3错误:注意库存量应为浮点存储;二、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;typedef struct{ double amount, price;}item;int main(){...
原创
71阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1069 The Black Hole of Numbers (20分)

一、思路一些int和string转换的方法1、string转int:(1)atoi(char*)(2)sscanf(char *, “%d”, &intager)从c字符串中读入整数;2、int转string:(1)to_string(int)(2)sprintf(str, “%d”, intager)将整数输出至c字符串;本体坑点总结:1、题目给出的输入未必是四位整数,...
原创
110阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1067 Sort with Swap(0, i) (25分)

一、思路1、基本思路:模拟题目所述过程,每次使0与一个被0占据最终位置的元素交换,即交换一个元素至最终位置,从而使元素有序;2、一个问题:首先构造数组pos[N], pos[i]表示数字i所在的位置;按照如上方式不断交换,当pos[0]==0时,存在两种可能:(1)所有元素已经有序(2)有元素还不在最终位置,但pos[0]==0,无法继续进行交换;当情形(2)出现时,为获得最少交换...
原创
34阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1066 Root of AVL Tree (25分) *AVL树的构造

一、AVL构造思路1、定义(1)平衡因子:结点的平衡因子为其左子树的高度减去右子树的高度。(2)AVL树:AVL树是所有结点平衡因子绝对值不超过1的BST(二叉查找树)。因此首先定义AVL树的数据结构:typedef struct node{ int data, factor; //factor即平衡因子; struct node *lchild, *rchild;}...
原创
35阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1065 A+B and C (64bit) (20分)

long double类型考察
原创
93阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1064 Complete Binary Search Tree (30分)

一、思路考察了两个数据结构知识点:1、BST的中序遍历序列是个升序序列2、完全二叉树的顺序存储:下标从0开始,则对结点i,其左孩子下标为i * 2 + 1,有孩子下标为1 * 2 + 2;由此可以想到,对给定数据排序,并建立长度为N的数组即为一个完全二叉树,对其从0(根)开始中序遍历依次赋值,即得到完全二叉树的BST。且从0到N顺序遍历就是层序遍历序列二、代码#include <...
原创
100阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1063 Set Similarity (25分)

一、思路1、使用set作为数据结构存储集合,利用set自动去重的特性;2、Nc及Nt的计算:Nt初始设为集合一中不同元素数,遍历集合二,若某元素不在集合一中,++Nt,否则++Nc;结果即Nc / Nt * 100%;3、显然使用unordered_set比set效率要高(但均不会超时)二、代码#include <cstdio>#include <unordere...
原创
36阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1062 Talent and Virtue (25分)

一、思路排序模板题二、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;typedef struct{ int ID, virtue, talent, total;}person;int cmp( person a, person b...
原创
39阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1061 Dating (20分)

一、思路题目表达的非常笼统。要求概述:1、前两串中,找到:第一对相等的、在’A’ ~ ‘G’范围内的大写字母2、前两串中,在刚找到的字母后面的位置,找到第一对相等的数字或‘A’ ~ 'N’范围内的字母3、对两串中,找到第一对相同的字母(同为小写或大写);二、代码#include <cstdio>#include <cctype>int main(){ ...
原创
51阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1060 Are They Equal (25分)

一、思路STEP1:使用字符串存储给定的数无法使用整型求解,会因为输入数超出整型范围无法表示,出现测试点5错误;STEP2:规范化表示,即确定指数位和有效位1、找到数字中小数点的下标,并删除小数点;2、找到第一个有效位的小标(若下标指向数字尾部,说明数字为0)3、此时发现,指数位即:小数点下标 - 删除小数点后第一个有效位下标此时注意:若数字为0,则指数位应为0,否则会出现测试点6错...
原创
53阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1059 Prime Factors (25分)

一、思路测试点3 答案错误:1为例外,没有素数为1的因数,输出“1=1”;二、代码#include <cstdio>bool isprime(int x){ for( int i = 2; i * i <= x; ++i ) if( x % i == 0 ) return false; return true;}...
原创
89阅读
2评论
1点赞
发布博客于 1 年前

PAT A 1057 Stack (30分)

解法一:分块哈希计数(易理解,效率高)思路:关键字的范围是1 ~ 100000,建立hash数组cnt[100001],cnt[i]即栈中关键字i的数量,即从1到100000遍历cnt[],易找到从小到大第K个关键字,但会消耗大量的时间,因此考虑分块的思想。分块查找当将长N的表划分为sqrt(N)块(考虑边界应向上取整),每块sqrt(N)个关键字时,获得最高效率(顺序查找);建立块总关键...
原创
71阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1056 Mice and Rice (25分)

一、思路弄了一个来小时…题目没看懂…题目大意:Np为老鼠总数,Ng为最大成员数。则对Np个老鼠每Ng个为一组,最重的胜出进入下一轮,并统计老鼠排名,知道产生冠军;并按照老鼠的序号给出重量,然后给出比赛的初始顺序;例:Np = 11, Ng = 3初始顺序 6 0 8 7 10 5 9 1 4 2 3,即序号6、0、8为第一组,序号7、10、5为第二组,依次类推。二、代码#incl...
原创
74阅读
0评论
0点赞
发布博客于 1 年前

PAT A 1055 The World's Richest (25分)

一、思路将全部记录按要求排序;对于每个请求,遍历全表,若年龄符合要求则输出,注意输出不多于M个,且输出为0时输出None;测试点2超时:使用scanf()、printf()输入输出;二、代码#include <cstdio>#include <string>#include <vector>#include <algorithm>u...
原创
41阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1052 Linked List Sorting (25分)

一、思路定义结构体node{addr, data, next};为避免出现给定结点集合中,有非链表成员的情况,先将结点按下标存储,再按照指针遍历,同时保存链表中的结点,并对结点排序,输出;二、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;ty...
原创
45阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1039 Course List for Student (25分)

一、思路(一)、用scanf()、printf()进行string类输入输出以节省执行时间:1、scanf()输入string str;str.resize(n);//必须预申请空间scanf("%s", &str[0]);2、printf()输出printf("%s", str.c_str());(二)、用unordered_map存储节省执行时间;二、代码#in...
原创
119阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1033 To Fill or Not to Fill (25 分)

一、思路(一)最低油价方案:1.若前面有一个价格比本站便宜的油站,那就去那边加更便宜的油,且只在本站加够到达低价油站的油;2.若前面油站都比本站要贵,说明本站的油是当前最便宜的,要把油加满,下一个目的地的前面一段路上相对最便宜的油站。(二)逻辑:有两种情形:下一个目的地是油站,或下一个目的地是终点。1.下一个目的地是油站的情况:(1)若前方存在价格更便宜的油站,且在可达范围内,且比终...
原创
44阅读
0评论
1点赞
发布博客于 1 年前

PAT A 1155 Heap Paths (30 分)

### 一、题目概述判定给定树是否为堆。### 二、思路略;### 三、代码```cpp#include <cstdio>#include <vector>using namespace std;void postorder( vector<int> tree, int t ){ if( t < tree.size() ) { postorder( tree, t * 2 + 1 ); postorder( tree, t * 2 +
原创
41阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1154 Vertex Coloring (25 分)

### 一、题目概述若任一对邻接顶点都拥有不同颜色,称proper k-coloring,k为颜色总数。判定给定顶点配色是否符合proper k-coloring定义,并确定k。### 二、思路建立边结构体及数组,顺序存储边结点。存在边,其两端顶点着色相同,输出"No"。### 三、代码```cpp#include <cstdio>#include <vector>#include <map>using namespace std;struct node{ int a, b
原创
85阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1153 Decode Registration Card of PAT (25 分)

### 一、题目概述根据询问的类型和关键字分类统计输出。类型1:排序输出所有该等级考生名单。按照找成绩降序排序,成绩相同时按照准考证号字典序排序。类型2:输出该考场考生总数和总分。类型3:输出该日期各考场的考生总数。### 二、思路**1、数据处理**(1)建立结构体node:```cppstruct node{ char lev; int site, date, id, score;};```(2)使用scanf()的格式控制符实现分类录入:```cpp
原创
17阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1152 Google Recruitment (20 分)

### 一、题目概述在给定的L位数字串中,找到首个连续K位数字组成的素数。### 二、思路1、用< string>库中的substr(pos, len)截取从下标pos开始的长度为len的子串。2、用sscanf()将子串转换为数字。3、注意使用long long保存数字并校验,K取9位时有可能超出int32位范围。### 三、代码```cpp#include <iostream>#include <cstdio>#include <string>using namespace st
原创
30阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1151 LCA in a Binary Tree (30 分)

### 一、题目概述寻找给定结点U、V的LCM(最近公共祖先)。### 二、思路LCM问题是一道非常经典的面试、算法考试题,解决方案也是多样的。当树中任意两个结点U、V互不为祖先时,LCM存在且唯一,且U、V分别在LCM的左右子树上。##### 思路一该方案在中序序列已知,且先序、后序序列任一已知时效率最高。**设LCM存在,由LCM是U、V所在子树的根知:LCM在先序序列中的位置一定在U和V的位置之前,且LCM在中序序列中的位置一定是U和V的位置之间。若找不到结点符合上述要求,则U、V
原创
23阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1150 Travelling Salesman Problem (25 分)

### 一、题目概述依据给定的无向图,判断给定的若干条路径是否是旅行商简单环、旅行商环或不是旅行商环。### 二、思路**设置若干变量:**NA-里程能否计算、total-总里程。若路径有间断,则无法计算(NA);cycle-是否为环。若首尾顶点不同,或路径有间断,则不是环。cnt-路径访问过的顶点数。**判断逻辑:**1、旅行商简单环(cnt == N && cycle && simple):(1)是环;(2)是简单环;(3)访问全部顶点。2、旅行商环(cnt == N && cy
原创
42阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1149 Dangerous Goods Packaging (25 分)

### 一、题目概述依据给定的货物互斥关系,判断给定的M个货物清单是否合法。### 二、思路以无向图存储货物的互斥关系。对每个待检测货物清单中的货物,标记出其互斥的货物,如在清单中则不是一个合法清单。### 三、代码```cpp#include <cstdio>#include <vector>#include <algorithm>using namespace std;vector<int> visited(2001, 0), G[2001], ans;int cnt;void
原创
36阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1148 Werewolf - Simple Version (20 分)

### 一、题目概述狼人杀游戏中,有村民和狼人两种身份。N个玩家中共有两个狼人,有两个人说谎且有一个是狼人。要求找出游戏中的两只狼。### 二、思路每次迭代假设两位玩家是狼人,检查每位玩家的发言,若玩家发言所说的身份和对方被假设的身份不符,则假设该玩家说谎。若该轮迭代共两人说谎,且其一为狼人,则为所求。迭代假设从低序号开始,因此找到的第一对狼就是最小解。### 三、代码```cpp#include <cstdio>#include <vector>using namespace s
原创
60阅读
0评论
2点赞
发布博客于 2 年前

PAT A 1147 Heaps (30 分)

### 一、题目概述依据给定的完全二叉树层序遍历序列,判断给定数据是大根堆、小根堆或不是堆。### 二、思路完全二叉树的顺序存储处理;注意完全二叉树顺序存储的几个性质(设从0开始):1.对结点i, 若有左孩子, 则下标为i * 2 + 1;若有右孩子,则下标为i * 2 + 2;2.共N个结点, 则最后一个非叶子节点下标为N/2 - 1;### 三、代码```cpp#include <cstdio>#include <vector>using namespace std;voi
原创
35阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1146 Topological Order (25 分)

### 一、题目概述建立有向图,判断给定的序列是否为一个拓扑排序序列。### 二、思路迭代给定序列,若当前顶点入度非零, 则不是拓扑序列,否则将所有出边邻接顶点入度减一。### 三、代码```cpp#include <cstdio>#include <vector>using namespace std;int main(){ int N, M, K; scanf("%d %d", &N, &M); vector<int> G[N + 1], indegre
原创
32阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1145 Hashing - Average Search Time (25 分)

### 一、题目概述1、依据给定数据集建立hash表,并求出查找给定M个数据的平均查找长度。2、散列函数确定了一般情况下关键字的存储位置,本题使用除留余数法:**H(key)=key%TSize**。3、如果发生了冲突,由冲突处理函数确定下次尝试的位置。本题使用平方探测法:**H(key)=( key + i ^ 2 ) % TSize**。其中Tsize为表长,i取值为[1,Tsize)。若i超出范围,就说明表中找不到合适的位置。### 二、思路getpos()函数返回散列的下标,同时计算比较次
原创
35阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1143 Lowest Common Ancestor (30 分)

### 一、题目概述寻找给定结点U、V的LCM(最近公共祖先)。### 二、思路LCM问题是一道非常经典的面试、算法考试题,解决方案也是多样的。当树中任意两个结点U、V互不为祖先时,LCM存在且唯一,且U、V分别在LCM的左右子树上。##### 思路一即下文所给出代码的方案。该方案在中序序列已知,且先序后序序列任一已知时效率最高。**设LCM存在,由LCM是U、V所在子树的根知:LCM在先序序列中的位置一定在U和V的位置之前,且LCM在中序序列中的位置一定是U和V的位置之间。若找不到结点
原创
46阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1142 Maximal Clique (25 分)

### 一、题目概述判定给定的顶点集的性质。Clique的定义:定点集中,任意一对顶点都相互邻接。其中若加入任意其他顶点则失去Clique的性质即为Maximum Clique。### 二、思路判定逻辑:对给定顶点集中顶点迭代,第i次迭代:(1)检查下标为i的顶点的被访问次数。若下标为i的顶点的被访问次数不是i,则该顶点与下标为0~i- 1的至少一个顶点不邻接,该顶点集不是Clique(2)访问下标为i的顶点的所有邻接顶点。若有顶点被访问到K(顶点集中顶点数)次,则该Clique可拓展。#
原创
49阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1141 PAT Ranking of Institutions (25 分)

### 一、题目概述依据给定学生信息,对机构进行排名输出。排序逻辑:按加权总分排名降序,相同则按照机构考生总数升序排名,仍相同按照机构名字典序排名。### 二、思路map作为数据结构缓存数据,统计完毕转存至数组排序输出。注意机构名统一为小写,加权总分的比较输出取整数部分。### 三、代码```cpp#include <cstdio>#include <iostream>#include <vector>#include <string>#include <unordered_ma
原创
46阅读
0评论
0点赞
发布博客于 2 年前

PAT A 1140 Look-and-say Sequence (20 分)

### 一、题目概述略;### 二、思路统计连续出现的字符数,字符串最后一位作哨兵。注意使用string不要使用 string = string + *的方式,回两次调用string,时空代价很高。使用+=很好。### 三、代码```cpp#include <iostream>#include <string>using namespace std;int main(){ string str; int N; cin >> str >> N; for(
原创
36阅读
0评论
0点赞
发布博客于 2 年前

PAT A 1139 First Contact (30 分)

### 一、题目概述当A想向B告白时,需要通过A同性朋友C,C再通过B的同性朋友D转达给B。依据给定关系网络,和一对有情人A、B,找到所有可以为他们牵线搭桥的朋友对。### 二、思路用数组related[]标记出B的所有直接同性好友(注意A、同性时不要标记A),遍历A的直接同性好友(同样要排除B),若A的直接同性好友C的朋友D被标记,C、D是一对牵线人。测试点1答案错误:注意-0000也是女生。### 三、代码```cpp#include <cstdio>#include <vect
原创
49阅读
0评论
0点赞
发布博客于 2 年前

PAT A 1138 Postorder Traversal (25 分)

### 一、题目概述依据给定先序中序遍历序列,确定后序序列的首个结点。### 二、思路后序遍历的访问逻辑为:若有左孩子访问左孩子;若无左孩子有右孩子,访问右孩子;若为叶子结点,则为后序遍历首个访问结点。### 三、代码```cpp#include <cstdio>#include <vector>using namespace std;int main(){ int N; scanf("%d", &N); vector<int> pre(N), in(N);
原创
33阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1137 Final Grading (25 分)

### 一、题目概述给定:P个编程考试成绩、M个期中考试成绩、N个期末考试成绩,找出所有合格者的信息并整理输出。合格标准:(1)编程考试成绩不低于200分;(2)最终成绩不低于60分。最终成绩核算:```cppif( Gmid > Gfinal ) G=(G​mid−term​​ × 40% + G​final​​ × 60%) ;else G = Gfinal;```### 二、思路使用map<string, node> L作为数据结构缓存数据,输入后将合格成员转存至ans数组
原创
32阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1136 A Delayed Palindrome (20 分)

### 一、题目概述略;### 二、思路加法过程中需要注意的问题:(1)进位问题每次迭代计算该位相加结果,用carry保存进位值。若计算结束后carry非零,则A数组增加一位。(2)使用向低位进位的方式运算,运算后逆置数组。### 三、代码```cpp#include <cstdio>#include <vector>#include <algorithm>using namespace std;bool ispld( vector<int> A ){ for( i
原创
90阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1135 Is It A Red-Black Tree (30 分)

### 一、题目概述判定给定树是否为红黑树。红黑树的性质:(1)根结点为黑;(2)若结点为红,则其左右孩子都为黑;(3)对任一结点, 从该结点出发至其子树上的叶子的路径上黑结点数量相同。### 二、思路红黑树是自平衡二叉排序树,使用BST建树的方法建树,用先序遍历判定是否为红黑树。判定方式:(1)若根结点为红,不是红黑树。(2)若结点为红,且有孩子为红,不是红黑树。(3)从根节点到所有叶子路径上黑结点数量相同是性质3的一个充要条件。因此遍历同时统计路径上黑结点数量,若当前结点为叶子且
原创
37阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1134 Vertex Cover (25 分)

### 一、题目概述Vertex Cover为一个顶点集,满足图中任一条边都至少与Vertex Corver中的一个顶点邻接。### 二、思路建立边结构体edge{ v1, v2 },将所有边存储在数组中。基于每个询问提供的顶点集, 遍历边数组。如果存在边邻接的两个定点都不在定点集中,则顶点集不是Vertex Corver。### 三、代码```cpp#include <cstdio>#include <vector>using namespace std;struct node{
原创
173阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1133 Splitting A Linked List (25 分)

### 一、题目概述对给定单链表进行结点洗牌,使负值结点在前、不大于K的正值结点在中、大于K的结点在后,且保持三部分内部相对顺序不变。### 二、思路遍历单链表,按值将结点分配至三个结点数组,然后输出三个数组。注意考虑可能有数组为空。### 三、代码```cpp#include <cstdio>#include <vector>using namespace std;struct node{ int data, addr, next;};int main(){
原创
80阅读
0评论
1点赞
发布博客于 2 年前

PAT A 1131 Subway Map(30分)

### 一、题目概述依据给定地铁路线图,找到源点、汇点间经过站数最少的路线,若两条路线经过站数相同,选择需换乘数少者。### 二、思路**1、关于如何判断a-b两站间的路线是几号地铁线路:**开辟一个10000 * 10000单元的数组是不现实的,空间效率很低。因此采用边界散列的思维,站点最大10000,则a * 10000 + b和b * 10000 + a可以唯一标识a-b间的路径。因此a-b所在的地铁线路号存储在line[ a * 10000 + b]和line[b * 10000 + a]
原创
161阅读
1评论
1点赞
发布博客于 2 年前