P3719 [AHOI2017初中组]rexp】的更多相关文章

P3719 [AHOI2017初中组]rexp一开始想的是类似计算式子的值的东西,用栈.然后发现处理最大值很麻烦,因为处理的很像子过程,所以考虑递归来做.碰到'('就递归一次,碰到'|'就取最大值再递归一次. if(a=='(') { sum+=work(0); }要在 if(a==')') { return sum; }之后.因为当递归返回时,a==')'然后到 sum+=work(0); }下一步是 if(a==')') { return sum; }就回去了.就没法往下读了. #inclu…
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 题目背景 以下为不影响题意的简化版题目. 题目描述 给出一个由(,),|,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<…
题目链接 本题的大致思路就是搜索. 将矩阵初始化成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…
题目描述 农场主John最近在网上买了一辆新车,在购买汽车配件时,John不小心点了两次"提交"按钮.导致汽车上安装了两套GPS系统,更糟糕的是John在使用GPS导航时,两套系统常常给出不同的路线.从地图上看,John居住的地区有N(2 ≤ N ≤ 100,000)个十字路口和M(1 ≤ M ≤ 500,000)条限定通行方向的道路.第i条道路连接路口 A_i (1 ≤ A_i ≤ N)和B_i (1 ≤ B_i ≤ N),两个路口之间可能连接有多条道路.允许双向通⾏的道路是将两条单…
题面 我们无论怎么走,都是要从此点沿最短路径走到终点,所以我们以n为原点跑两边dijkstra就可以了: 而抱怨数可以根据之前跑出来的东西新建一个图,然后跑最短路就好了: #include <bits/stdc++.h> #define inc(i,a,b) for(register int i=a;i<=b;i++) using namespace std; int head[2000010],cnt; class littlestar{ public: int to; int nxt…
贪心+二分答案 二分最终答案长度 主要问题在check上 ~~我代码写得巨丑,大家还是不要看我的代码了~~ ------------ 1:当mid大于1的时候,贪心策略是这样的: 当前连续的长度大于mid时,我不反转最后一个,我也不管它具体反转哪一个,我直接跳过这mid+1个,也就是开始处理i+1.举个例子,mid=3,k=1,NNNNNNN,我反转第4个,变成NNNFNNNmid=3,k=1,NNNNFFF,我反转前3个的任意一个不管怎么反转,前4个对后面是没有影响了,那我就不用管具体怎么反转…