題目大意:給定 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...