Bzoj4915--简单的数学(打表)题
Description
对任意的四个不同的正整数组成的集合$A={a_1,a_2,a_3,a_4 }$,记$S_A=a_1+a_2+a_3+a_4$,设$n_A$是满足$a_i+a_j (1≤i<j≤4)|S_A$的数对(i,j)的个数,现在有两问第一问:求对于所有由4个不同正整数的集合A,n_A的最大值是多
少第二问:我们将给出l,r,求区间l到r内满足n_A为最大值的集合组数。
--------------------------------------此后一千里--------------------------------------------------------
假设a1,a2,a3,a4是按从小到大排序后的数。
由于四个不同整数,所有对数[1,2][1,3][1,4][2,3][2,4][3,4]。对于类似[1,2]->[3,4]和[1,3]->[2,4]这种分法,只有可能前者是S的约数,因为后者一定是前者的倍数且倍数大于1,所以这里有两种取法,要让最大值为4种的话,显然必须要[1,4]->[2,3]这种取法取两边都行,即$a_1+a_4=a_2+a_3$。(1)
然后考虑$a_2+a_4=k(a_1+a_3)$。(k>1)(2)
将(2)代入(1)得到
$2a_2+a_3-a_1=ka_1+ka_3$
$2a_2=(k+1)a_1+(k-1)a_3$ (3)
因为$a_3>a_2$所以k<3又因为k>1所以k=2,代入(3)得$2a_2=3a_1+a_3$ (4)
然后考虑$a_3+a_4=k(a_1+a_2)$ (k>1)(5)
由(1)(4)得
$a_3=2a_2-3a_1$ (6)
$a_4=3a_2-4a_1$ (7)
将(6)(7)代入(5)得
$5a_2-7a_1=ka_1+ka_2$
$(5-k)a_2=(k+7)a_1$
$a_2=\frac {k+7}{5-k}*a_1$
显然$k<5$
且$k>2$因为$a_3>a_2$且$a_2+a_4=2(a_1+a_3)$
那么k只能取3或4,若$a_1=1$对应即是[1,5,7,11]和[1,11,19,29]
综上,满足条件的四元组为$[a_1,5a_1,7a_1,11a_1]$或$[a_1,11a_1,19a_1,29a_1]$
怕不是官方钦定打表。。。
代码 :
#include<bits/stdc++.h> #define INF 0x3f3f3f3f #define eps 1e-9 #define LL long long using namespace std; #define int int inline int Max(int a,int b) {return a>b?a:b;} inline int Min(int a,int b) {return a<b?a:b;} inline int Sqr(int a) {return a*a;} inline int Abs(int a) {return a>0?a:-a;} #undef int LL l,r,lr,rr,ans; int main() { scanf("%lld%lld",&l,&r); puts("4"); lr=l*11;rr=l*29; if(lr<=r) ans+=(r-lr)/11+1; if(rr<=r) ans+=(r-rr)/29+1; cout<<ans<<endl; return 0; }