题目描述:

社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的)。要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。

输入格式:
输入第一行给出一个正整数N(2≤N≤10​^5)。
随后一行给出N个正整数,分别是每个人的活跃度,其间以空格分隔。题目保证这些数字以及它们的和都不会超过2​^31​ 。

输出格式:
按下列格式输出:

Outgoing #: N1
Introverted #: N2
Diff = N3
其中N1是外向型人的个数;N2是内向型人的个数;N3是两群人总活跃度之差的绝对值。

输入样例1:
10
23 8 10 99 46 2333 46 1 666 555

输出样例1:
Outgoing #: 5
Introverted #: 5
Diff = 3611

输入样例2:
13
110 79 218 69 3721 100 29 135 2 6 13 5188 85

输出样例2:
Outgoing #: 7
Introverted #: 6
Diff = 9359

解题思路:

先对数组进行排序,内向型一定在数组的前半部分,外向型一定在数组的后半部分,当人数为偶数时,很好处理,求出Diff直接输出即可,当人数为奇数时,需要对数组中间的那个元素进行判断,根据题目中的要求(两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开)分别将该元素放在数组的前半部分和后半部分,求出Diff,取最大的即可。

AC代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{int n;cin>>n;vector<int> a;for(int i=0;i<n;++i){int num;cin>>num;a.push_back(num);}sort(a.begin(),a.end());int out=0,in=0,outsum=0,insum=0;if(a.size()%2==0){out=in=a.size()/2;for(unsigned int i=0;i<a.size();++i){if(i<a.size()/2){insum+=a[i];}else{outsum+=a[i];} }int diff=outsum-insum;printf("Outgoing #: %d\nIntroverted #: %d\nDiff = %d",out,in,diff);  }else{out=in=a.size()/2;for(unsigned int i=0;i<a.size();++i){if(i<a.size()/2){insum+=a[i];}else if(i==a.size()/2){continue;}else{outsum+=a[i];}    }if(abs(outsum+a[a.size()/2]-insum)>abs(outsum-insum-a[a.size()/2])){out+=1;int diff=abs(outsum+a[a.size()/2]-insum);printf("Outgoing #: %d\nIntroverted #: %d\nDiff = %d",out,in,diff); }else{in+=1;int diff=abs(outsum-insum-a[a.size()/2]);printf("Outgoing #: %d\nIntroverted #: %d\nDiff = %d",out,in,diff);  }}return 0;
}

7-2 人以群分 (25 分)相关推荐

  1. 【CCCC】L2-017 人以群分 (25分),,模拟水题

    problem L2-017 人以群分 (25分) 社交网络中我们给每个人定义了一个"活跃度",现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向 ...

  2. 7-9 人以群分 (25 分)

    7-9 人以群分 (25 分) 社交网络中我们给每个人定义了一个"活跃度",现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introver ...

  3. 7-48 人以群分 (25分)

    7-48 人以群分 (25分) 社交网络中我们给每个人定义了一个"活跃度",现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introver ...

  4. L2-017 人以群分 (25分)

    题目描述: 社交网络中我们给每个人定义了一个"活跃度",现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的 ...

  5. 人以群分 (25 分)

    社交网络中我们给每个人定义了一个"活跃度",现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的).要求两类 ...

  6. L2-017 人以群分 (25 分)(c语言实现)

    该题目如下 如题所示,其中会先给数据的个数,所以先进行数据的录入,利用数组来存储数据中的活跃度,同时利用一个n来记录数组中元素的个数. 数据录入过程: int n1, n2, n3; int n = ...

  7. 7-3 人以群分 (25 分)

    7-3 人以群分 (25 分) 社交网络中我们给每个人定义了一个"活跃度",现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introver ...

  8. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...

  9. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

最新文章

  1. 【大学课程】高数基础知识点
  2. linux基本项目环境搭建
  3. 在Linux下常用的命令
  4. php 判断 多组,请教怎么有效判断几组数据范围是否有交集
  5. SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第一天任务攻略
  6. 计算机辅助小学数学教学的研究,计算机辅助数学教学的研究
  7. C++ 重载赋值运算符与11选5平台修复
  8. python3的fft_FFT乘法Python 3.4.3
  9. 亮度对比度色调饱和度最佳_色彩三要素之—— “饱和度”
  10. LeetCode 1055. 形成字符串的最短路径
  11. ElementUI Button按钮样式
  12. 澳国立计算机录取分数,澳洲国立大学最近录取分数线及注意事项
  13. 路由器总是有信号无网络连接到服务器,路由器经常连不上网信号很差怎么回事...
  14. Maven系列学习(2)——java project的创建
  15. 最优化路径和火车票退票
  16. 计算机进位制转换方法,进位计数制及其转换方法过程详解
  17. 水表读数图解_水表读数怎么正确看 水表怎么读?
  18. win10服务器返回为空,CAD出现错误: ActiveX 服务器返回错误: 加载类型库/DLL 时出错...
  19. 二进制代码运算规律是逢二进一
  20. CentOS7系统下Java环境和tomcat的安装

热门文章

  1. 二叉树的深度优先搜索, 前序中序后序
  2. 继承和实现区别java_java中继承和实现有什么区别,分别给程序带来了怎样的好处?...
  3. 抖音、美团“神仙打架”
  4. 《数字图像处理》题库5:计算题 ③
  5. linux查看进程和杀死进程
  6. Python 网络爬虫实战:爬取 B站《全职高手》20万条评论数据
  7. df.to_excel的功能与用法
  8. Vue组件的命名规则
  9. 大数据技术之Scala
  10. origin作图局部扩大及添加定值辅助线(十字架)