NC248202. 超现实子序列
描述
输入描述
输入共两行。
第一行一个正整数 ,第二行 个正整数 。
输出描述
一行一个正整数表示最长长度。
示例1
输入:
4 3 4 2 5
输出:
4
示例2
输入:
6 2 4 5 7 3 6
输出:
4
C++(g++ 7.5.0) 解法, 执行用时: 847ms, 内存消耗: 8240K, 提交时间: 2023-03-02 19:47:40
#include<bits/stdc++.h> using namespace std; long long n,a[1000001],i,j,b,c,d; int main() { scanf("%lld",&n); for(i=1;i<=n;i=i+1)scanf("%lld",&a[i]); for(i=1;i<=min(n,1000ll);i=i+1) { b=1;c=1; for(j=i+1;j<=n;j=j+1) if(a[j]==a[i]+c) { b=b+1;c=-c; if(c>0)++c; } d=max(d,b); } cout<<d; return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 703ms, 内存消耗: 4324K, 提交时间: 2023-03-03 11:22:24
#include<bits/stdc++.h> using namespace std; int n, a[1<<20], b, c, d; int main() { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", a + i); for(int i = 1; i <= min(n, 500); i++) { b = c = 1; for(int j = i + 1; j <= n; j++) if(a[j] == a[i] + c) b++, c = -c, c += c > 0; d = max(d, b); } cout << d; }