自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 2018杭电笔试最小生成树

为了能给他的n个西瓜地顺利的浇上水,对于每个西瓜地他可以选择在本地打井,也可以修管道从另一个瓜地将水引过来。紧接着是一个nn的整数矩阵,矩阵的第i行第j列的数代表pi,j(两块西瓜地之间建立管道的费用)。由于瓜地较多,王大爷无法选择在哪些(个)瓜地打井,哪些西瓜地之间修管道。首先想到是最小生成树的题目,但一般最小生成树只要处理边权就ok了,但这里有挖井的点权。(具体看code注释)的思想转化为一般的最小生成树问题,下面是两种处理最小生成树算发的实现。第1行,一个正整数n,代表西瓜地的数量。

2023-03-21 22:07:43 268

原创 1001 A+B Format

pta

2022-06-27 13:37:26 127

原创 1130 Infix Expression (25 分)

1.树的遍历2.在每个非根节点、非叶子节点的两边加上个括号#include <bits/stdc++.h>using namespace std;struct node{ string s; int l,r;};vector<node > T;bool vis[25];int n;//st标记是否为根节点void dfs(int rt,int st){ int f=0; if(st&&(T[rt].l!=-1||

2021-04-28 17:10:52 101

原创 1129 Recommendation System (25 分)

传送门1.重载 <2.set//解法一#include <cstdio>#include <set>using namespace std;int book[50001];struct node { int value, cnt; node(int a, int b):value(a), cnt(b){} bool operator < (const node &a) const { return (cnt

2021-04-28 15:57:32 108

原创 1127 ZigZagging on a Tree (30 分)

传送门1.根据后续中序建树2.广搜将每层的节点放入同一数组3.按奇数偶数倒序正序输出每层的节点#include <bits/stdc++.h>using namespace std;struct node{ int val; int step; struct node *left; struct node *right;};vector<int > post,in;vector<vector<int > >

2021-04-27 00:11:12 81

原创 1123 Is It a Complete AVL Tree (30 分)

传送门1.avl树的构建2.树的层序遍历3.判断是否为完全二叉树#include <bits/stdc++.h>using namespace std;struct node { int val; struct node *left, *right;};node *rotateLeft(node *root) { node *t = root->right; root->right = t->left; t->lef

2021-04-26 19:08:41 77

原创 1119 Pre- and Post-order Traversals (30 分)

参考代码前序和后序求中序(答案不唯一,产生原因是某个节点没有两个儿子)传送门#include<bits/stdc++.h>using namespace std;bool f;vector<int > pre,post, in;void inorder(int preLeft,int preRight,int postLeft,int postRight){ if(preLeft==preRight){ in.push_back(pre[preL

2021-04-25 22:52:36 64

原创 1115 Counting Nodes in a BST (30 分)

传送门1.给一个序列建二叉搜索树 、dfs建树2.dfs遍历#include<bits/stdc++.h>using namespace std;struct node{ int val; node *left; node *right;};vector<int > cnt(1005);int maxstep;//建树 node *build(node *a,int val){ if(a==NULL){ a = ne

2021-04-25 16:47:46 62

原创 1111 Online Map (30 分)

传送门1.Dijkstra + DFS2.先把所有路径储出来再dfs路径找符合条件的解#include <bits/stdc++.h>using namespace std;const int inf = 0x3f3f3f3f;int grape[505][505],wt[505][505];bool vis[505];int dis[505],tim[505];vector<vector<int > > pa1,pa2;vector<int &

2021-04-21 23:16:01 99

原创 2021-04-21

传送门1.树的遍历2.二叉树的性质设一棵二叉树的节点数为n将一棵二叉树以数组的形式存储若(起点为1),其是完全二叉树则树的最后一个节点的坐标等于n,若其为不是完全二叉树即说明树有空缺,即最后以一个节点的坐标一定大于n#include <bits/stdc++.h>using namespace std;struct node{ int l,r;};vector<node> tr;bool check[25];int maxstep,ans;void

2021-04-21 20:39:52 77

原创 1107 Social Clusters (30 分)

传送门1.并查集2.根据第三方元素合并集合3.统计集合数量及集合的个数#include<bits/stdc++.h>using namespace std;int fa[1005];int hoppyToPeople[1005];//两人要是右任何一个相同的习惯就是同一个集合int root[1005];bool cmp(int a,int b){ return a> b;}int Find(int x){ if(x!=fa[x]) retu

2021-04-19 23:26:39 80

原创 1105 Spiral Matrix (25 分)

1.顺时针填矩阵2.math#include<bits/stdc++.h>using namespace std;#define ll long longstruct node{ int x,y;};node op[4];bool isprime(int x){ //这里1虽然不是素数但也此题也可放入该列 if(x==1) return true; int k = (int)sqrt(x); for(int i=2;i<=k;

2021-04-19 21:18:35 73

原创 //GPLT L2-2 三足鼎立

1.STL2.math3.lower_bound和upper_bound的底层是二分实现的#include<bits/stdc++.h>using namespace std;#define ll long longll a[200005];int main(){ ll n,v; scanf("%lld%lld",&n,&v); for(int i=0;i<n;i++) scanf("%lld",&a[i])

2021-04-19 19:10:32 278

原创 L2-4 网红点打卡攻略 (25 分)

#include<bits/stdc++.h>using namespace std;bool vis[205];int grape[205][205];int cnt;const int inf = 0x3f3f3f3f;int n,k;int main(){ fill(grape[0],grape[0]+205*205,inf); scanf("%d%d",&n,&k); for(int i=0;i<k;i++){ .

2021-04-19 17:51:18 441

原创 L1-7 整除光棍 (20 分)

L1-7 整除光棍 (20 分)这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,

2021-04-18 23:17:02 609 1

原创 1103 Integer Factorization (30 分)

1.dfs2.剪枝#include <bits/stdc++.h>using namespace std;int n,k,p;vector<int > v,ans,tpans;int maxn=-1;void inits(){ int tp=0,index=1; while(tp<=n){ v.push_back(tp); tp =(int)pow(index,p); index++; }

2021-04-17 22:44:52 68

原创 1099 Build A Binary Search Tree

1.中序遍历建树2.bfs层序输出3.不能用//1020 Tree Traversals (25 分)的方法输出层序,因为其index会报int#include <bits/stdc++.h>using namespace std;struct node{ int val; int l,r;};vector<node > t;int key[105]; int cnt;int n;//map<int,int > level;void

2021-04-17 14:57:19 92

原创 堆的模板

#include<bits/stdc++.h>using namespace std;const int maxn = 100;int heap[maxn];//数组存的数据从下标为1开始int n = 100;//low为要数组中要调节元素对应的下标,high为数组中最后一个元素所对映的下标void downAdjust(int low,int high){ //i为父节点,j为左儿子节点 int i = low,j = low*2; while(i<

2021-04-17 13:47:45 138

原创 1098 Insertion or Heap Sort (25 分)

参考代码1.堆排序#include <iostream>#include <algorithm>#include <vector>using namespace std;void downAdjust(vector<int> &b, int low, int high) { int i = 1, j = i * 2; while(j <= high) { if(j + 1 <= high &amp

2021-04-15 00:16:09 94

原创 1094 The Largest Generation (25 分)

1.树的搜索2.寻找树的层数最多的节点数#include <bits/stdc++.h>using namespace std;vector<vector<int > > tr;int le_n[105];int ans,level;int n,m;struct node{ int id; int level;};void bfs(int x){ node root; root.id = 1; root.leve

2021-04-14 11:08:57 75

原创 1091 Acute Stroke (30 分)

1.bfs2.区域块数量统计3.bfs该图搜索中比dfs花销要小、、、dfs会照成栈溢出(递归层数太多)#include <bits/stdc++.h>using namespace std;int x,y,z,t;bool g[60][1286][128],vis[60][1286][128];int ans=0,sum;int op[6][3] = {{0,0,1},{0,1,0},{1,0,0},{0,0,-1},{0,-1,0},{-1,0,0}};struct no

2021-04-12 19:42:21 78

原创 1089 Insert or Merge (25 分)

1.插入排序与并归排序的理解#include <bits/stdc++.h>using namespace std;int a[105],b[105];int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ scanf("%d",&b[i

2021-04-11 14:40:14 54

原创 1087 All Roads Lead to Rome (30 分)

1.djkstra2.记录全部路径+dfs3.维护点权4.注意方法二路径的维护迭代#include<bits/stdc++.h>using namespace std;const int inf = 0x3f3f3f3f;int grape[205][205];//存边权bool vis[205];int cost[205];//存花费,即最短路int happy[205];//点权map<string,int > stoid;map<int ,stri

2021-04-07 20:17:12 169

原创 1085 Perfect Sequence (25 分)

1.贪心2.数据类型的选择 p 要设成long long,因为data[i] * p可能会大于int的取值范围#include<bits/stdc++.h>using namespace std;int main(){ vector<int > data; int n; long long p; scanf("%d%lld",&n,&p); data.resize(n)

2021-04-07 14:56:37 63

原创 1082 Read Number in Chinese (25 分)

1.hash2.惰性处理思想(前导0的处理,遇到一个非零的数才考虑有没有前导0)#include<bits/stdc++.h>using namespace std;string num[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};string c[6] = {"Ge","Shi","Bai","Qian","Yi","Wan"};int J[] = {1,10,100,1000,10000,10000

2021-04-07 10:39:10 90

原创 最大公因数、最小公倍数

//1.求A,B的最大公公约数int gcd(int a,int b) //基于(a,b)=(a,ka+b);(a,b)表示a,b最大的公约数{ if(b==0) return a; return gcd(b,a%b);}//求最小公倍数int lcm(int a,int b){ return a*b/gcd(a,b);}

2021-04-06 22:01:50 59

原创 1080 Graduate Admission (30 分)

1.模拟2.结构体排序3.个顶序列赋排名#include<bits/stdc++.h>using namespace std;vector<vector<int > > school;int n,k,c;struct node{ int id; int ge,gl; int sum; int c_s[5];};vector<node > people;vector<int > w,ranks;b

2021-03-31 22:49:57 70

原创 1079 Total Sales of Supply Chain (25 分)

1.dfs2.dfs记录深度#include<bits/stdc++.h>using namespace std;//存储关系网 vector<vector<int > > tree;//存储根节点对应的权值(零售商所买的物品数) map<int ,int > mp;int n;double p,k,sum=0.0;void dfs(int id,int step){ if(tree[id].size()==0){

2021-03-31 20:33:42 59

原创 1078 Hashing (25 分)二次方探查法

二次方探查法#include <iostream>using namespace std;int size, n, hashTable[10100];bool isprime(int num) { if(num == 1) return false; for(int i = 2; i * i <= num; i++) if(num % i == 0) return false; return true;}void insert(int k

2021-03-31 17:05:06 116

原创 1076 Forwards on Weibo

传送门1.bfs2.维护广搜层数#include<bits/stdc++.h>using namespace std;vector<vector<int > > data;int n,k;int cnt = 0;vector<bool > vis;struct node{ int id; int step;};//要广度优先搜索,因为若某个节点在step更大的情况下被标记,可能会导致最后结果变小 //void dfs(i

2021-03-31 15:24:03 62

原创 1068 Find More Coins (30 分) 01背包

1.01背包问题2.此题给出的硬币,将其的体积花费视为其价值 即使w[i]==val[i]3.应为要记录用了的硬币,用chice[i][j]标记用过的硬币~#include<bits/stdc++.h>using namespace std;int w_v[10005];int dp[10005]; bool choice[10005][105];vector<int > ans;bool cmp(int a,int b){ return a > b

2021-03-27 13:17:26 51

原创 1067 Sort with Swap(0, i) (25 分)

1贪心2.以0为交换原素之一,使一个无序的序列,经过最小的swap(0,a)操作,变成有序#include<bits/stdc++.h>using namespace std;int a[100005];int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ int tp; scanf("%d",&tp); //a[tp]存储tp的位

2021-03-27 10:08:41 67

原创 1066 Root of AVL Tree

传送门柳大佬详解1.avl树2.四个旋转左选右旋左旋右旋右旋左旋#include <iostream>using namespace std;struct node { int val; struct node *left, *right;};node *rotateLeft(node *root) { node *t = root->right; root->right = t->left; t->le

2021-03-26 20:50:59 100

原创 1062 Talent and Virtue (25 分)

参考代码结构提排序前可先分下类。。。。。不然cmp写道爆炸#include <iostream>#include <algorithm>#include <vector>using namespace std;struct node { int num, de, cai;};int cmp(struct node a, struct node b) { if ((a.de + a.cai) != (b.de + b.cai))

2021-03-24 23:32:22 49

原创 快速线性筛

参考博客利用了每个合数必有一个最小素因子。每个合数仅被它的最小素因子筛去正好一次。//线性筛 #include<bits/stdc++.h>using namespace std;#define MAXSIZE 10001int Mark[MAXSIZE];int prime[MAXSIZE]; //判断是否是一个素数 Mark 标记数组 index 素数个数int Prime(){ int index = 0; memset(Mark,0,sizeof(M

2021-03-24 17:50:18 145

原创 1057 Stack (30 分)

传送门1.用树状数组维护一个序列的中位数(求本质序列第K大问题)2.二分3.其修改和访问的时间复杂度都为O(lgn)#include<bits/stdc++.h>using namespace std;stack<int > s;const int maxn = 100010;int a[maxn];int lowbit(int i){ return i&(-i);}void updata(int pos,int val){ for(in

2021-03-24 16:05:46 64

原创 1056 Mice and Rice (25 分)

传送门dfs+模拟回溯:维护rank按权值排序STL:a.insert(a.end(),b.begin(),b.end()); 将一个容器拼接到另一容器尾部#include<bits/stdc++.h>using namespace std;int n ,m,ranks=0;vector<int > ans, weight,indexs;bool cmp(int a,int b){ return weight[a] < weight[b];}//

2021-03-23 23:47:06 79

原创 传统的延续————浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛)

传送门题目描述题目背景 在一个神秘的古老国度有着这样的一个传统,如果一个城市曾向另一个城市宣誓,那么这个城市的最高建筑不得高于效忠的城市,一个城市最多只会宣誓一次。 特别的如果城市A曾向B宣誓,B城市曾向C城市宣誓,那么我们会认为城市A也会向城市C效忠。 由于国家的快速发展,不断有新的城市出现,也就不断有新的效忠关系出现,关系实在是错综复杂。 所以现在请你写一个程序来判断有多少个城市对之间的关系任然是合法的。 一对城市的关系被看作是合法的当且仅当城市之间存在效忠关系,且附属

2021-03-21 21:09:23 277

原创 来自wzc的简单拓扑dp———浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛)

传送门题目描述(良心出题人wzc说这是个简单拓扑dp,它就必然是一个简单拓扑dp,wzc是不会骗人的)wzc在一张拓扑图上,他所在的起始位置被标记为0。除了起始位置外,还有被1到n这n个整数所标记的n个顶点,每个顶点i都有一个正整数值xi。 这些顶点之间存在着m条有向边。题目保证图中不存在环,且从顶点0出发必定能到达顶点n。wzc希望从起点0出发经过某条路径到达顶点n,并且收集经过的所有结点上的数字,使得所有数字的和最大。 现在请你帮wzc求出他能得到的最大数字和是多少。1.拓扑排序

2021-03-21 20:53:50 417 1

原创 1053 Path of Equal Weight (30 分)

传送门1.树的遍历2.dfs3.按权值排序#include<bits/stdc++.h>using namespace std;vector<vector < int > > tree,ans;vector<int > weight,tpans;vector<bool > vis; int n,m;long long val;bool cmp(int a,int b){//为保证输出是按路径权值降序的 return

2021-03-20 21:01:00 94

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除