栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

牛牛看云C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

牛牛看云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<

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号