codevs4696 等差數列

2022-05-20 14:03:13 字數 876 閱讀 5617

題目大意:給定 n 個整數組成的集合,向集合中新增乙個整數,使得這 n+1 個整數組成等差數列,求這樣的整數有多少個。

題解:引理1:若原集合中只有乙個元素,則有無數種可能。

引理2:若原集合中有且僅有兩個整數,則最多可能有 3 種答案。

引理3:若原集合已經能夠組成等差數列,則只能在序列首尾新增元素。

引理4:若原集合中的數字不能構成等差數列,且其差分序列有超過兩個不相等的值,則無解。

引理5:若原集合中的數字不能構成等差數列,且其差分序列有且僅有兩個相等的值,且相對較大的值有且僅有乙個,且這個值是較小值的二倍時,才有且僅有乙個答案。

**如下

#include using namespace std;

const int maxn=60;

int n,ans,tot,a[maxn],delta[maxn];

mapmp;

void read_and_parse()

bool check()

void solve()

else if(n==2)

else if((a[1]+a[2])%2==0)else

return;

} else if(check())

else

}else

map::iterator p=mp.begin(),q=--mp.end();

if(q->second>1)

if(q->first!=p->first*2)

puts("1");

int goal=q->first;

for(int i=2;i<=n;i++)if(delta[i]==goal) }}

int main()

codevs等差數列

題目描述 description 給定n 1 n 100 個數,從中找出盡可能多的數使得他們能夠組成乙個等差數列.求最長的等差數列的長度.輸入描述 input description 第一行是乙個整數n,接下來一行包括了n個數,每個數的絕對值不超過10000000.輸出描述 output descr...

codevs 等差數列

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解給定n 1 n 100 個數,從中找出盡可能多的數使得他們能夠組成乙個等差數列.求最長的等差數列的長度.輸入描述 input description 第一行是乙個整數n,接下來一行包括了n個數,每個數的絕對值不超過1000000...

CODE VS 1006 等差數列

題目 題解 1006 等差數列 include define debug define maxsize 100 int n 資料大小 intarray maxsize 所有數值 int maxcount 最大計數 int darray maxsize 差值陣列 交換陣列位置 void swap in...