牛牛看云C++

牛牛看云C++,第1张

牛牛看云C++

这题意思就是文中的那个公式

 这个公式相当于

如果知道这个的话,很多人可能都试过直接暴力,然后就出现了时间超限,然后就不知所措了。

我们先不管绝对值和1000时候

想想a=1 2 3 4的情况:

(1+1)+ (1+2)+ (1+3)+ (1+4)

(2+2)+ (2+3)+ (2+4)

(3+3)+ (3+4)

(4+4)

想想a=1 1 1 1时的情况:

(1+1)+(1+1)+(1+1)+(1+1)

(1+1)+(1+1)+(1+1)

(1+1)+(1+1)

(1+1)

再a=1 1 1 1中,1 出现的次数为  4次

4*4+4 = 20;

20 / 2 = 10;

我们再去想想a=1 2 3 4时怎么得出的,就理解了

下面就是代码

#include "bits/stdc++.h"
using namespace std;
const int N = 1e6+5;
int s[N];
int zhi[1005];
int main(){
    int n;
    long long ans = 0;
    cin>>n;
    for(int i = 1;i<=n;i++){
        cin>>s[i];
        zhi[s[i]]++;//记录每个数出现的次数
        ans += abs((long long)s[i]*2-1000);//自己+自己也要记录一下,直接存到结果ans里面
    }
    //把0-1000全部的数枚举下
    for(int i = 0;i<=1000;i++){
        for(int j = 0;j<=1000;j++){
            ans += (long long)zhi[i]*zhi[j]*abs(i+j-1000);//数之间匹配的结果之和
        }
    }
    cout<

以上想法是我赛后,看了大佬的代码,理解下后获得的想法,然后补题并且写下思路来提高自己,然后补知识点遗忘。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存