题解 P1420 【最长连号】】的更多相关文章

洛谷——P1420 最长连号 题目描述 输入n个正整数,(1<=n<=10000),要求输出最长的连号的长度.(连号指从小到大连续自然数) 输入输出格式 输入格式: 第一行,一个数n; 第二行,n个正整数,之间用空格隔开. 输出格式: 一个数,最长连号的个数. 输入输出样例 输入样例#1: 10 3 5 6 2 3 4 5 6 8 9 输出样例#1: 5 很显然,这是来搞笑的. 代码: #include<cstdio> #include<cstdlib> #includ…
题目描述 输入n个正整数,(1<=n<=10000),要求输出最长的连号的长度.(连号指从小到大连续自然数) 输入输出格式 输入格式: 第一行,一个数n; 第二行,n个正整数,之间用空格隔开. 输出格式: 一个数,最长连号的个数. 输入输出样例 输入样例#1: 10 3 5 6 2 3 4 5 6 8 9 输出样例#1: 5 #include<iostream> #include<cstdio> #include<cmath> using namespace…
题目描述 输入n个正整数,(1<=n<=10000),要求输出最长的连号的长度.(连号指从小到大连续自然数) 输入输出格式 输入格式: 第一行,一个数n; 第二行,n个正整数,之间用空格隔开. 输出格式: 一个数,最长连号的个数. 输入输出样例 输入样例#1: 复制 10 3 5 6 2 3 4 5 6 8 9 输出样例#1: 复制 5 [代码]: #include<bits/stdc++.h> using namespace std; const int INF = 0x3f3f…
题目传送门 这道题我是打暴力的...(尴尬) 所以直接是O(N2)的时间,但好像没有炸,数据很水... #include<bits/stdc++.h> using namespace std; ],ans; int main(){ scanf("%d",&n); ;i<=n;i++) scanf("%d",&a[i]); ;i<=n;i++){ ,j=i; ;j<=n&&a[j]==a[j-]+;j++)…
题目大意:输入$n$个正整数,($1\leq n\leq 10000$),要求输出最长的连号的长度.(连号指从小到大连续自然数) 题解:考虑从小到大连续自然数差分为$1$,所以可以把原数列差分(后缀自动机不怎么会写啊),查询串为$1,11,111,\dots,111\dots(n-1个1)$,把它们插入到$AC$自动机中,然后查询即可,原数列差分不为$0,1$时赋为$0$(因为不对答案有影响) 卡点:1.原序列差分的数不为$0,1$时会挂... C++ Code:($AC$自动机2018-8-1…
[题解]最长递增路径 [51nod1274] 传送门:最长递增路径 \([51nod1274]\) [题目描述] 一个可能有自环有重边的无向图,每条边都有边权.输入两个整数 \(n,m\) 表示一共 \(n\) 个点,\(m\) 条边并且给出 \(m\) 条边的信息:连接点 \(x,y\),边权为 \(w\).你可以从任何点出发,任何点结束,可以经过同一个点任意次,但是同一条边不能经过多次,并且你走过的路必须满足所有边的权值严格单调递增,求最长能经过多少条边. 以此图为例,最长的路径是: \(3…
题目描述 输入n个正整数,(1<=n<=10000),要求输出最长的连号的长度.(连号指从小到大连续自然数) 输入格式 第一行,一个数n; 第二行,n个正整数,之间用空格隔开. 输出格式 一个数,最长连号的个数. 样例输入 10 3 5 6 2 3 4 5 6 8 9 样例输出 5…
这个题过去的同学可以再来一题(P1567 统计天数): https://www.luogu.org/problemnew/show/P1567 是的,这个题其实也不是很难,就是前后比较,将天数压栈, 然后对那些天数进行排序,十分的水神奇... 这个题可以用打擂台(stack/queue),但是我用的优先队列. 优先队列是指大小根堆,但是应该是以队列方式存储的STL模板库. 好处就是这个队列的根部(最顶端)是最大值, 每个子节点也相对于第二层子节点是最大值,以此类推... 优先队列自我维护! 那么…
题面 解析 这题一眼DP啊. 然而想了半天毫无思路. 后来看题解后发现可以按边权的大小顺序DP. 将边权从小到大排序,对于权值相同的边分为一组. 设\(f[i][0]\)表示经过当前权值的边后到达\(i\)的最长路, \(f[i][1]\)表示经过之前的权值的边后到达\(i\)的最长路. 那么对于一条边\(x,y\), \(f[x][0]=max(f[x][0],f[y][1]+1\)), \(f[y][0]=max(f[y][0],f[x][1]+1\)). 在处理完每组边后用\(f[i][0…
栈,模拟 把每个元素逐个入栈 如果和栈顶元素匹配,那么一块弹出去,同时标记这里是可匹配的. 取出连续的,最长的可匹配的序列即可. #include <iostream> #include <stdio.h> #include <string.h> #define re register #define Clean(X,K) memset(X,K,sizeof(X)) using namespace std ; const int Maxl = 1000005 ; str…