P3719 [AHOI2017初中组]rexp 没有什么算法的题做起来真不适应,这道题深深讽刺了我想用栈维护匹配括号个数的想法: 递归解决就行了: 时刻注意函数返回值是什么,边界条件是什么: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; typedef double dd; typedef long long ll; ll n; ll a[maxn]; ll i…
P3719 [AHOI2017初中组]rexp一开始想的是类似计算式子的值的东西,用栈.然后发现处理最大值很麻烦,因为处理的很像子过程,所以考虑递归来做.碰到'('就递归一次,碰到'|'就取最大值再递归一次. if(a=='(') { sum+=work(0); }要在 if(a==')') { return sum; }之后.因为当递归返回时,a==')'然后到 sum+=work(0); }下一步是 if(a==')') { return sum; }就回去了.就没法往下读了. #inclu…
洛谷P3719 [AHOI2017初中组]rexp 题目背景 以下为不影响题意的简化版题目. 题目描述 给出一个由(,),|,a组成的序列,求化简后有多少个a. 化简规则: 1.形如aa...a|aa...a|aa...a的,化简结果为“|”两边a的个数最多的一项,例如a|aa|aaa=aaa 3.先算带括号的序列,例如(a|a)|aaa=aaa 输入格式 一行一个序列 输出格式 化简后a的个数 输入输出样例 输入 #1复制 aa(aa)|(aa|(a|aa))aa 输出 #1复制 4 说明/提…
初中组..唉 题意有点误解,当前在x点走一步,gps产生代价条件是沿非x到n的最短路走. 直接倒着跑两遍$i\sim n$的两种最短路,然后枚举每条边走的时候是否可以在两种最短路上,不是就产生1个代价,然后以这个代价重新建图正着跑一遍最短路即可. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<…
题意:就是让你求出时间复杂度. 分析:由于指数最多为10次方,所以可以想到用一个数组保存各个指数的系数,具体看代码实现吧! 代码实现: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; ][]; ]; int num; struct node{ ]; void init() { memset(sum,,sizeof(su…
题目描述 任何一个正整数都可以用22的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20 同时约定方次用括号来表示,即a^bab 可表示为a(b)a(b). 由此可知,137137可表示为: 2(7)+2(3)+2(0)2(7)+2(3)+2(0) 进一步: 7= 2^2+2+2^07=22+2+20(2^1用2表示),并且 3=2+2^03=2+20 所以最后137137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2…
思路 可并堆真是一种神奇的东西 不得不说这道题是道好题,虽然并不需要可并堆,但是能加深对可并堆的理解 首先考虑斜堆的性质,斜堆和左偏树相似,有如下的性质 一个节点如果有右子树,就一定有左子树 最后插入的节点一定没有右子树 然后考虑倒序删除节点就可以做了 对一个节点,如果它没有右子树,它就可能是最后插入的点,但是显然还有其他情况 如果它的左子树中还有满足条件的点,则取深度最浅的节点即可,考虑小于等 于当前根的权值的情况时,取深度最深会有问题,可以自行画图 然后如果左子树中只有一个节点,那么两个节点…
题目链接 本题的大致思路就是搜索. 将矩阵初始化成false.先把灯塔标记.在搜一遍灯塔能照到的点并标记.最后搜一遍找被灯塔标记的个数. 详细解释见题解. 题解走起. #include<bits/stdc++.h> using namespace std; ][]; //数组开的有点大哈,开到200就足够了.不过想要标记,就要是bool型的. int main() { ; //sum为后面用的计数器. ,k=,i=; int x,y; //i,j,k,x,y作为控制循环次数的东东. cin&g…
题目背景 以下为不影响题意的简化版题目. 题目描述 一个n*n的网格图上有m个探测器,每个探测器有个探测半径r,问这n*n个点中有多少个点能被探测到. 输入输出格式 输入格式: 第一行3个整数n,m,r 接下来m行,每行两个整数x,y表示第i个探测器的坐标 输出格式: 能被探测到的点的个数 输入输出样例 输入样例#1: 5 2 1 3 3 4 2 输出样例#1: 8 说明 1<=n,m<=100   太水了,不用差分就过了. #include<iostream> #include&…
[题解] 这两道题是完全一样的. 思路其实很简单,对于两种边权分别建反向图跑dijkstra. 如果某条边在某一种边权的图中不是最短路上的边,就把它的cnt加上1.(这样每条边的cnt是0或1或2,代表经过这条边GPS报警的次数) 最后用每条边的cnt作为边权建图,跑dijkstra即可. 判断某条边是不是最短路上的边:建反向图,以n为起点跑dijkstra,如果某条边(u,v)满足dis[v]=dis[u]+w,那么这条边是u到n的最短路上的边. #include<cstdio> #incl…