NOJ&数据结构&算法设计
文章平均质量分 67
西北工业大学:NOJ&数据结构&算法设计
Phoenix_ZengHao
这个作者很懒,什么都没留下…
展开
-
西北工业大学NOJ Python程序设计作业91-100
第10季:挑战算法(Season 10-Challenges)(91-100)前置知识点这部分主要是运用前面的知识来实现算法题目,没有前置知识点。这部分题目比较简单,主要考察算法思路和代码规范。镜像字符镜像要求就是ord(′a′)+ord(′z′)=ord(′b′)+ord(′y′)=...ord('a')+ord('z')=ord('b')+ord('y')=...ord(′a′)+ord(′z′)=ord(′b′)+ord(′y′)=...,所以算出t=ord(′a′)+ord(′z′)t=原创 2022-01-20 08:30:07 · 5440 阅读 · 0 评论 -
西北工业大学NOJ-Python程序设计作业81-90
第9季:类(Season 9-Class)(81-90)前置知识点这部分主要是运用前面的知识来实现相关的类,没有前置知识点。这部分题目比较简单,主要考察算法思路和代码规范。圆类import mathclass Circle: def __init__(self,r): self.r=r self.PI=3.14 def area(self): return self.r*self.r*self.PI def perimet原创 2022-01-19 18:49:46 · 2972 阅读 · 0 评论 -
西北工业大学NOJ-Python程序设计作业61-70
第7季:列表与元组(Season 7-List and Tuple)(61-70)前置知识点建议大概了解下述函数库的基本运用之后再完成题目会更顺利。列表排序:常用方式:假设l是列表,元素都是整数,可以直接l.sort(),默认从小到大排序,如果l.sort(reverse=True)则从大到小排序,也可以在内部设置key排序规则,比如:l.sort(key=lambda a:a[1])就相当于以第二个参数为关键字排序(key=lambda是固定写法)。列表元素统计:l.count(n)表示l中原创 2022-01-19 18:49:26 · 4060 阅读 · 0 评论 -
西北工业大学NOJ Python程序设计作业71-80
第8季:集合与字典(Season 8-Sets and Dictionary)(71-80)前置知识点建议大概了解下述函数库的基本运用之后再完成题目会更顺利。copy()与deepcopy()区别寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。sort原创 2022-01-19 18:49:03 · 5425 阅读 · 0 评论 -
西北工业大学NOJ Python程序设计作业51-60
第6季:字符串(Season 6-String)(51-60)前置知识点建议大概了解下述函数库的基本运用之后再完成题目会更顺利。time库strptime()函数语法time.strptime(x,"%Y-%m-%d")(x:时间字符串;后面的是格式化字符串)返回struct_time对象。eval()函数语法eval(expression),比如eval( '3 * x' ),其中x=7x=7x=7,那结果就是21replace()函数语法str.replace(old,原创 2022-01-19 18:48:42 · 3859 阅读 · 0 评论 -
西北工业大学NOJ-Python程序设计作业41-50
第5季:模块化(Season 5-Modularization)(41-50)前置知识点建议大概了解下述函数库的基本运用之后再完成题目会更顺利。列表:可以使用append()方法来添加列表项:a.append('b')(a是列表)删除列表元素:del a[0]或者del a[0:2](删除[0,2))转换列表元素类型:比如a[]中都是int,需要转换成str,则a=map(str,a)输出列表的元素:print(','.join(a))(中间用’,'分割,并且a中元素的类型是str)。注意原创 2022-01-19 18:48:16 · 5084 阅读 · 1 评论 -
西北工业大学NOJ Python程序设计作业31-40
第4季:枚举算法(Season 4-Enumeration algorithm)(31-40)前置知识点建议大概了解下述函数库的基本运用之后再完成题目会更顺利。基本运算符:(摘自菜鸟教程)注意区分/和//的区别二维数组python定义二维数组略微麻烦:a=[[0 for i in range(1000+5)] for i in range(1000+5)]定义了一个a[][]a[][]a[][]大小为(1005*1005)初始值为0math.gcd语法:math.gcd(x,y)返原创 2022-01-19 18:47:37 · 6955 阅读 · 8 评论 -
西北工业大学NOJ-Python程序设计作业21-30
第3季:循环(Season 3-Loop)(21-30)前置知识点建议大概了解下述函数库的基本运用之后再完成题目会更顺利。基本运算符:(摘自菜鸟教程)注意区分/和//的区别字符串翻转reversedreversed函数返回一个反转的迭代器。(注意返回的是迭代器而不是字符串)语法:reversed(seq)join()方法join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。语法:s=''.join(list)(’'内部是间隔方式,join()内是列表或者字符串之类的原创 2022-01-19 18:47:06 · 6889 阅读 · 2 评论 -
西北工业大学NOJ Python程序设计作业11-20
第2季:小段代码(Season 2-Snippet) (11-20)前置知识点建议大概了解下述函数库的基本运用之后再完成题目会更顺利。math库导入函数库import math求余切:math.atan()的输入参数是弧度而不是度。求平方根:math.sqrt()求次方: math.pow(x,y)相当于求xyx^yxy求反余弦值:math.acos()fractions库可以同时提供分子(numerator)和分母(denominator)给构造函数用于实例化Fraction类,原创 2022-01-19 11:51:09 · 7130 阅读 · 0 评论 -
西北工业大学NOJ-Python程序设计作业1-10
第1季:水题(Season 1-Easy) (1-10)前置知识点number的类型转换:(参考菜鸟教程)int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x )原创 2022-01-19 11:21:15 · 11737 阅读 · 2 评论 -
西北工业大学NOJ Python程序设计作业 Python快速入门100题(西北工业大学noj)
前言由于大三下课程少,修不够15学分,所以选了个python(3学分)来凑学分。恰好1月赶上了疫情,网课期间课也比较少,所以准备把NOJ上的100个题快速过一遍,然后更新一份题解。不过由于做题的时候比较水,写一份代码就直接提交了,所以有些题WA了好几次,不过也有些确确实实是题意有问题或者数据有点问题。做完NOJ上的Python程序设计100题大约花了2天多的时间(1.17和1.18,1.19凌晨12:10写完最后一题)NOJ提交情况和运行时间:NOJ-Python程序设计 题解待更新,稍等。原创 2022-01-19 10:54:46 · 3148 阅读 · 0 评论 -
NOJ-1149-旅游预算
旅游预算描述一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同。旅游预算有如下规则: 若油箱的油过半,不停车加油,除非油箱中的油不可支持到下一站;每次加油时都加满;在一个加油站加油时,司机要花费2元买东西吃;司机不必为其他意外情况而准备额外的油;汽车开出时在起点加满油箱;计算精确到分(1元=100分)。编写程序估计实际行驶在某路线所需的最小费用。输入第一行为起点到终点的距离(实数) 第二行为三个实数,后跟一个整数,每两个数据间用一个空格隔开。其中第一个数原创 2020-11-04 17:16:23 · 1073 阅读 · 0 评论 -
NOJ-1006-堡垒问题
堡垒问题代码:#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=20+5;int n,vis[maxn][maxn],ans;char a[maxn][maxn];int max(int x,int y){ if(x>=y)return x; return y;}void dfs(int now,int cnt){ i原创 2020-11-19 00:16:02 · 517 阅读 · 9 评论 -
NOJ-1243-循环赛日程表
循环赛日程表代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn=500+50;int n,a[maxn][maxn];void dfs(int r,int c,int h){ if(h==1)return ; h/=2; a[r+原创 2020-11-18 22:22:33 · 309 阅读 · 0 评论 -
NOJ-1148-石子合并
http://phoenix-zh.cn/2020/11/04/NOJ-石子合并/石子合并描述在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆。规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。编一程序,读入石子堆数n及每堆的石子数(<=20)。选择一种合并石子的方案,使得做n-1次合并,得分的总和最小; 比如有4堆石子:4 4 5 9 则最佳合并方案如下:4 4 5 9 score: 08 5 9 score: 8原创 2020-11-04 17:01:38 · 863 阅读 · 0 评论 -
NOJ-1084-花生米(三)
花生米(三)描述五一长假第三天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(仓库,又见仓库……)。这次Tom制定分花生米规则如下:1、Tom和Jerry轮流从堆中取出k粒花生米吃掉;2、第一次取花生米的人只能取一粒,以后取花生米的数量不能超过前一个人取花生米数量的两倍;3、为显示规则的公平性,Jerry可以选择先取或者后取。Jerry当然还是希望最后一粒花生米被Tom吃掉。请计算,Jerry为了达到目的应该先取还是后取。输入本题有多个测例,每个测例的输入是一个整数n,n大于零小于等原创 2020-11-04 17:49:24 · 711 阅读 · 0 评论 -
NOJ-1005-装载问题
装载问题代码:#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=1000+50;int c1,c2,n,w[maxn],sign;void dfs(int now){ if(now==n+1){ sign=1; return ; } if(c1>=w[now]){ c1-=w[now]; dfs(now+1原创 2020-11-18 22:28:11 · 270 阅读 · 0 评论 -
NOJ-1209-滑雪
滑雪描述Michael喜欢滑雪这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-原创 2020-11-06 00:02:58 · 644 阅读 · 2 评论 -
NOJ-1085-花生米(四)
花生米(四)描述五一长假第四天,Tom逛了N个bbs,做了N^2个脑筋急转弯题,终于发现了每次吃完花生米嘴里都是苦味的原因:自己总会吃到最后一粒花生米。五一长假第五天,Tom和Jerry在仓库散步的时候发现了n堆花生米(这是什么仓库啊?!)。这次Tom制定分花生米规则如下:1、首先选出最苦的一粒花生米,放到一个瓶子里;2、Tom和Jerry轮流从任意一堆花生米中取出任意粒吃掉;3、如果Tom吃到最后一粒花生米(瓶子里的花生米除外),Jerry必须吃掉瓶子里的花生米;如果Jerry吃到最后一粒花生原创 2020-11-04 22:56:48 · 223 阅读 · 0 评论 -
NOJ-1144-农场灌溉问题
农场灌溉问题代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=100+5;struct Node{ int l,r,u,d;}t[maxn],a[maxn][maxn];int n,m,vis[maxn][maxn]; void dfs(int x,int y){ if原创 2020-11-19 00:14:33 · 492 阅读 · 0 评论 -
NOJ-1576-最大连续子序列和问题
最大连续子序列和问题描述:给定一整数序列A0,A1, A2,… An-1 (可能有负数),求A0An-1的一个连续子序列AiAj,使得Ai到Aj的和最大。输入:先输入一个正整数n(1<n<1000),再输入n个整数。输出:输出最大连续子序列的和。输入样例:102 -1 5 -7 2 -1 4 -2 4 -5输出样例:7思路代码还没有AC,NOJ评测机炸了,但是这个O(n)的思路大概是对的:sum[i]为前i个数字的连续子序列的最大和。如果sum[i-1]<0,那原创 2020-11-06 14:18:58 · 771 阅读 · 0 评论 -
NOJ-1541-加1乘2平方
原博客:加1乘2平方加1乘2平方描述给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次输入输入两个10000以内的正整数m和n,且m小于n输出输出从m变化到n的最少次数输入样例1 16输出样例3方法1:思路:设定dp[i]表示从m到达i最少需要i步。初始化dp[]无穷大,显然dp[m]=0,即到起点的步数为0。对于i来讲可以到达i的只有三种状态:i-1、i/2、sqrt(i)(其中i/2和sqrt(i)需要满足整数条件)。这也是基于i整体单增的条件原创 2020-11-08 20:53:11 · 862 阅读 · 0 评论 -
NOJ-1001-二分查找
二分查找描述给定一个单调递增的整数序列,问某个整数是否在序列中。输入第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。输出每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。输入样例51 3 4 7 113369输出样例YesNoNo思路:方法一:按照题目要求进行二分查找,由于a[]是单增数列,所以对于每一个输入查询x,我们先设置左边界l=1原创 2020-11-08 20:58:35 · 660 阅读 · 0 评论 -
NOJ-1205-活动安排
活动安排问题描述Jack是一名nwpu的大一新生,对学校举办的各种活动都十分的好奇,想尽可能多的参加这些活动。Npwu每天共有N项活动,其开始结束时间分别为B[i],E[i],(i = 1,2,……N)请问Jack一天最多能参加几项活动。当然,Jack在同一时间内只能参加一项活动,即jack参加的活动时间上不能重叠,但时间为[t1,t2],[t2,t3]的两个活动是可以同时参加的。输入第一行 一个整数N(1<=n<=1000)表示活动总数。接下来N行表示各活动的起始,结束时间0<原创 2020-11-08 21:02:10 · 817 阅读 · 0 评论 -
NOJ-1142-踩气球
踩气球代码:感觉题意说明不够全,好像是POJ的原题。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=1000+50;int sign1,sign2,n,m,x1=1,x2=1;void dfs(int x){ if(x==101){ if(x1==n&&x原创 2020-11-19 00:15:26 · 536 阅读 · 0 评论 -
NOJ-1323-穷举n位二进制数
穷举n位二进制数代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn=100+50;int a[maxn],n;int main(){ int i,x; cin>>n; for(i=n;i>=1;i--)cout&原创 2020-11-18 22:19:16 · 280 阅读 · 0 评论 -
NOJ-1579-三阶幻方
三阶幻方代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int vis[15],a[5][5];void dfs(int x,int y){ int i; if(x==4&&y==1){ for(i=1;i<=3;i++){ if(a[i][3]+a[i][2]+a[i]原创 2020-11-19 00:13:47 · 694 阅读 · 0 评论 -
NOJ-1086-花生米(五)
花生米(五)描述五一长假第六天,Tom在QQ上遇到了Kitty。呵呵,Kitty,在离散数学课上认识的PPMM……等等!Tom恍然大悟:自己这一生除了看帖不回之外最大的错误就是离散数学没学好!五一长假第七天,Tom和Jerry在仓库散步的时候发现了一堆花生米(仓库,呵呵,仓库…)。这次Tom制定分花生米规则如下:1、首先选出最苦的一粒花生米,放到一个瓶子里;2、把剩下的花生米做成花生酱,Tom和Jerry轮流取一些花生酱吃掉;3、第一个取的人只能取1.0克,以后取花生酱的数量不能少于两个人已经取原创 2020-11-05 23:43:32 · 168 阅读 · 0 评论 -
NWPU-算法设计理论作业
1.二分查找描述给定一个单调递增的整数序列,问某个整数是否在序列中。输入第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。输出每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。输入样例51 3 4 7 113369输出样例YesNoNo思路:方法一:按照题目要求进行二分查找,由于a[]是单增数列,所以对于每一个输入查询x,我们先设置左边界l原创 2020-10-28 23:57:08 · 1455 阅读 · 0 评论 -
NOJ-1048-计算矩阵连乘积
计算矩阵连乘积描述在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。计算C=AB总共需要p×q×r次乘法。现在的问题是,给定n个矩阵{A1,A2,…,An}。其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要求计算出这n个矩阵的连乘积A1A2…An最少需要多少次乘法。输入输入数据的第一行是一个整树n(0 < n <= 10),表示矩阵的个数。接下来的n行每行两个原创 2020-11-04 11:28:12 · 871 阅读 · 0 评论 -
NOJ-1007-8皇后问题
8皇后问题代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=25;int vis[maxn][maxn],used[maxn][maxn],n,cnt=0;void dfs(int tot){ int i,j; if(tot==n+1){ cnt++;printf("N原创 2020-11-19 00:16:09 · 314 阅读 · 0 评论 -
NOJ-1002-归并排序
归并排序代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=10000+50;int n,a[maxn],t[maxn];void Sort(int l,int r,int mid){ int i=l,j=mid+1,k=0; while(i<=mid&&原创 2020-11-18 22:08:07 · 267 阅读 · 0 评论 -
NOJ-1046-防卫导弹
防卫导弹描述一种新型的防卫导弹可截击多个攻击导弹。它可以向前飞行,也可以用很快的速度向下飞行,可以毫无损伤地截击进攻导弹,但不可以向后或向上飞行。但有一个缺点,尽管它发射时可以达到任意高度,但它只能截击比它上次截击导弹时所处高度低或者高度相同的导弹。现对这种新型防卫导弹进行测试,在每一次测试中,发射一系列的测试导弹(这些导弹发射的间隔时间固定,飞行速度相同),该防卫导弹所能获得的信息包括各进攻导弹的高度,以及它们发射次序。现要求编一程序,求在每次测试中,该防卫导弹最多能截击的进攻导弹数量,一个导弹能被截原创 2020-11-04 10:54:21 · 1190 阅读 · 0 评论 -
NOJ-1324-穷举所有排列
穷举所有排列代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=25;int n;char a[maxn];void dfs(int t){ int i; if(t==n+1){ for(i=1;i<=n;i++)cout<<a[i];cout<原创 2020-11-18 22:24:00 · 384 阅读 · 0 评论 -
NOJ-1008-素数环问题
素数环问题代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn=105;int n=20,vis[maxn],a[maxn],cnt;void swap(int x,int y){ int t=a[x]; a[x]=a[y]; a[原创 2020-11-19 00:15:47 · 418 阅读 · 0 评论 -
NOJ-算法设计实验-test3
先占个坑,等什么时候有空了,再补题解,先贴上代码.代码都不长,就是简单bfs.vis标记注意状态.除了特殊的二阶魔方是真的恶心!A.加1乘2平方#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<cmath>using namespace std;const int maxn=100原创 2020-10-25 21:55:21 · 575 阅读 · 0 评论 -
NOJ-1009-迷宫问题
迷宫问题代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int maxn=20+5;int T,sx,sy,tx,ty,vis[maxn][maxn],d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};char s[maxn][原创 2020-11-19 00:15:37 · 265 阅读 · 0 评论 -
NOJ-1574-求第k小数
求第k小数代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=10000+50;int n,a[maxn],k;int main(){ int i; cin>>n; for(i=1;i<=n;i++)cin>>a[i]; cin>>原创 2020-11-18 22:21:07 · 208 阅读 · 0 评论 -
NOJ-1575-图的m着色问题
图的m着色问题代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=200+5;int n,m,r,a[maxn][maxn],ans,vis[maxn];void dfs(int cnt){ int i,j; if(cnt==n){ ans++; return ;原创 2020-11-19 00:14:03 · 323 阅读 · 0 评论 -
NOJ-1004-01背包问题
0-1背包问题代码:#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=10000+50;int n,m,w[maxn],p[maxn],dp[maxn];int max(int x,int y){ if(x>=y)return x; return y;}int main(){ int i,j; while(1){原创 2020-11-18 22:26:45 · 447 阅读 · 0 评论