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;
}
View Code

 

posted @ 2017-06-05 09:45  ihopenot  阅读(494)  评论(0编辑  收藏  举报