1056 最長等差數列 v2
基準時間限制:8 秒 空間限制:131072 kb
n個不同的正整數,從中選出一些數組成等差數列。
例如:1 3 5 6 8 9 10 12 13 14
等差子數列包括(僅包括兩項的不列舉)
1 3 5
1 5 9 13
3 6 9 12
3 8 13
5 9 13
6 8 10 12 14
其中6 8 10 12 14最長,長度為5。
現在給出n個數,你來從中找出乙個長度 >= 200 的等差數列,如果沒有,輸出no solution,如果存在多個,輸出最長的那個的長度。
input
第1行:n,n為正整數的數量(1000 <= n <= 50000)。output第2 - n+1行:n個正整數。(2<= a[i] <= 10^9)
(注,真實資料中n >= 1000,輸入範例並不符合這個條件,只是乙個輸入格式的描述)
找出乙個長度 >= 200 的等差數列,如果沒有,輸出no solution,如果存在多個,輸出最長的那個的長度。input示例
1013output示例5689
1012
1314
no solution
玄學優化題,,
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view codeusing
namespace
std;
9 typedef long
long
ll;10 typedef long
double
ld;11 typedef pairpr;
12const
double pi=acos(-1
);13
#define rep(i,a,n) for(int i=a;i<=n;i++)
14#define per(i,n,a) for(int i=n;i>=a;i--)
15#define rep(i,u) for(int i=head[u];i;i=next[i])
16#define clr(a) memset(a,0,sizeof(a))
17#define pb push_back
18#define mp make_pair
19#define fi first
20#define sc second
21#define pq priority_queue
22#define pqb priority_queue , less>
23#define pqs priority_queue , greater>
24#define vec vector
25 ld eps=1e-9
;26 ll pp=1000000007
;27 ll mo(ll a,ll pp)
28 ll powmod(ll a,ll b,ll pp)
29void fre()
30//
void add(int x,int y,int z)
31int dx[5]=,dy[5]=;
32 ll read()
37const unsigned int p=1795876373;38
const
int p_=7;39
#define hash(i) (((unsigned int)i*p)>>p_)
40int a[50005],ans=199;41
bool f[40000000
];42
void work(int x,int
d)47 ans=max(now,ans);48}
49int
main()60}
61if (ans>=200) printf("%d"
,ans);
62else puts("
no solution");
63return0;
64 }
51nod 1056 最長等差數列 V2
這個和1055那個題差不多,稍微改改就過了,首先是剪枝的改寫,這個剪枝是必過的,唐老師在討論裡進行了證明。首先要明確等差數列的定義。乙個等差數列可以用首項 公差和項數的三元組 firs t,de lta,leng th 表示,當然這個 f irst 也可以換成末項 l ast 取決於你的演算法。我們...
51Nod 最長等差數列
題目描述 n個不同的正整數,找出由這些數組成的最長的等差數列。例如 1 3 5 6 8 9 10 12 13 14 等差子數列包括 僅包括兩項的不列舉 1 3 5 1 5 9 13 3 6 9 12 3 8 13 5 9 13 6 8 10 12 14 其中6 8 10 12 14最長,長度為5。輸...
51nod 1055 最長等差數列
原題鏈結 1055 最長等差數列 基準時間限制 2 秒 空間限制 262144 kb 分值 80 難度 5級演算法題 n個不同的正整數,找出由這些數組成的最長的等差數列。例如 1 3 5 6 8 9 10 12 13 14 等差子數列包括 僅包括兩項的不列舉 1 3 5 1 5 9 13 3 6 9...