当前位置: 代码迷 >> 综合 >> 1305 Pairwise Sum and Divide
  详细解决方案

1305 Pairwise Sum and Divide

热度:87   发布时间:2023-12-16 03:50:05.0

像这种题感觉有点难找规律,所以不强求,但是还是写个博客记录一下。这道题稍作推敲就会发现只有当a或b为1或2时才能使等式floor((a+b)/(a*b))不为0。其他都为0,其中的数学推理,应该是基本不等式。a+b>=2*sqrt(a*b)。则(a+b)/(a*b)>=2*sqrt(a*b)/(a*b).

#include <stdio.h>int main(int argc, const char * argv[])
{int N;int i, j = 0;long long A[100001];long long sum = 0;scanf("%d", &N);for (i = 0; i < N; i++){scanf("%lld", A + i);if (A[i] == 2)  //2单独处理{j++;}else if (A[i] == 1) //这里考虑到1和非1组合时结果为1、1和1组合时结果为2,{                   //而1和1的组合会被利用两次,所以与前者归并在一起考虑(C(1,N-1)sum += N - 1;}}printf("%lld\n", sum + j * (j - 1) / 2);    //因为2和2组合会被利用两次 C(2,j-1);return 0;
}



  相关解决方案