zoukankan      html  css  js  c++  java
  • Codeforces Round #198 (Div. 2) —— C

    C题很容易看懂题目,不过两个循环肯定会TLE,所以得用点小聪明;

    首先排好序,因为是全排列,乱序和顺序的结果是一样的;

    然后呢····

    如果是数列 1 2 3 4 5

    元素1 被 2 3 4 5每个减了2次,它自己减0一次;相抵后为-7;

    元素2 被 3 5 4 每个减了2次,它减1两次,减0一次;相抵后为 -3;

    元素3 相抵后为1;

    可以发现他们的数量相差4;这样就好办了,一个循环就搞定了;

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 int a[100009];
     6 long long gcd(long long a,long long b)
     7 {
     8     return b==0?a:gcd(b,a%b);
     9 }
    10 int main()
    11 {
    12     long long ans=0,n,t;
    13     cin>>n;
    14     for(long long i=0; i<n; i++)
    15         scanf("%d",&a[i]);
    16     sort(a,a+n);
    17     t=3-2*n;
    18     for(long long i=0; i<n; i++,t+=4)
    19         ans+=a[i]*t;
    20     long long k=gcd(ans,n);
    21     cout<<ans/k<<" "<<n/k<<endl;
    22     return 0;
    23 }
    View Code
  • 相关阅读:
    主席树学习记录
    P1072 Hanson 的趣味题 题解
    好文章收集
    计算几何专题
    小问题
    CSP-S2020题解
    上下界网络流
    想到的无法解决的点子
    省选联考2020组合数问题
    省选数学复习
  • 原文地址:https://www.cnblogs.com/yours1103/p/3293173.html
Copyright © 2011-2022 走看看