摘要:排序题#include #include #include #include #include using namespace std;const int N = 100005;int score[10];struct Node{ int id; int problem; int get;}person[N];struct ANS{ int rank; int id; int total; int get[6]; bool flag; int perfect;}ans[10005];int cmp1(const ANS &a, const ANS &b){ if (a.tota
阅读全文
随笔分类 - 浙大PAT
摘要:BFS,题意比较难懂,是求离query L层的总共人数#include #include #include #include #include #include #include using namespace std;const int N = 1005;struct E{ int node;};vector v[N];int mark[N];void add_edge(int a, int b){ E tmp; tmp.node = b; v[a].push_back(tmp);}struct ANS{ int num; int lev;};void BFS(int x, int ll){
阅读全文
摘要:模拟题,注意当k == 1 与 k == n时情况#include #include #include #include #include using namespace std;const int N = 100005;struct Node{ int pre; int value; int lat;}node[N];int order[N];int size;map pre2idx;void solve1(int fir, int n){ map::iterator it = pre2idx.find(fir); order[size++] = it->second; while (
阅读全文
摘要:分析: 考察归并排序,用简单的快排会超时。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 11 using namespace std;12 13 // 归并排序14 15 int a[1000005];16 int b[1000005];17 int c[2000005];18 19 int merge(int n, int m)20 {21 int i = 0, j = 0, k = 0;22 ...
阅读全文
摘要:分析: 考察最短路,可以使用Dijkstra算法,关键在于有相等路径时的判断。 特别注意:题目要求的是the number of different shortest paths 和the maximum amount of rescue teams you can possibly gather。 1 #include 2 #include 3 #include 4 #include 5 //#include 6 7 using namespace std; 8 9 const int Max_required = 505; 10 const int Ma...
阅读全文
摘要:分析: 考察BST + 完全二叉树的性质,注意: (1):先用排序排好,然后由于是完全二叉树,我们使用中序来建树。 (2):建好之后,层次遍历可以采用队列。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std;10 11 vector vect;12 vector result;13 14 struct Node15 {16 int value;17 Node *left;18 Node *r...
阅读全文
摘要:分析: 考察树状数组 + 二分, 注意以下几点: 1.题目除了正常的进栈和出栈操作外增加了获取中位数的操作, 获取中位数,我们有以下方法: (1):每次全部退栈,进行排序,太浪费时间,不可取。 (2):题目告诉我们key不会超过10^5,我们可以想到用数组来标记,但不支持快速的统计操作。 (3):然后将数组转为树状数组,可以快速的统计,再配上二分就OK了。 2.二分中我们需要查找的是一点pos,sum(pos)正好是当前个数的一半,而sum(pos - 1)就不满足。 1 #include 2 #include 3 #inclu...
阅读全文
摘要:分析: 考察二分,简单模拟会超时,优化后时间正好,但二分速度快些,注意以下几点: (1):如果一个序列D1... Dn,如果我们计算Di到Dj的和, 那么我们可以计算D1到Dj的和sum1,D1到Di的和sum2, 然后结果就是sum1 - sum2; (2): 那么我们二分则要搜索的就是m + sum[i]的值。#include #include #include #include #include #include #include #include #include #include using namespace std;const int Max_Int = 0x7ff...
阅读全文
摘要:分析: 考察并查集,注意中间合并时的时间的合并和人数的合并。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 using namespace std; 11 12 const int Max_Int = 0x7fffffff; 13 const int Max_required = 500; 14 15 struct Node //记录gang的信息 16 { 17 in...
阅读全文
摘要:分析: 模拟题,提交无数次WA,注意几点: 1.如果某人没有有效通话记录,则不输出该人的信息,在此WA15次,题目看了N遍也没出现啊。 2.通话时间钱的计算:假设我们计算time1到time2的账单; (1)我们可以采用从起点(即00:00:00)开始计算,结果就是get_money(time2) - get_money(time1), 这样计算方便。 (2)我们也可以采用从time1开始递增直到time2, 这样比较烦。 3.有效的通话记录是指:如果某人的通话记录为1.on;2.on;3.off;,则其中1.on将被抛弃,匹配到2.on;3...
阅读全文
浙公网安备 33010602011771号