51nod1056 最長等差數列 V2

2022-08-20 06:12:09 字數 2125 閱讀 9106

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)。

第2 - n+1行:n個正整數。(2<= a[i] <= 10^9)

(注,真實資料中n >= 1000,輸入範例並不符合這個條件,只是乙個輸入格式的描述)

output

找出乙個長度 >= 200 的等差數列,如果沒有,輸出no solution,如果存在多個,輸出最長的那個的長度。
input示例

1013

5689

1012

1314

output示例

no solution

玄學優化題,,

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

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 }

view code

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...