PTA 人以群分(25 分)
2017-11-23 19:38
477 查看
7-2 人以群分(25 分)
社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的)。要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。
输入格式:
输入第一行给出一个正整数N(2≤N≤105)。随后一行给出N个正整数,分别是每个人的活跃度,其间以空格分隔。题目保证这些数字以及它们的和都不会超过231。
输出格式:
按下列格式输出:
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
机智的我双开数组代表 + if 讨论 1A
鲁老师的学生不许抄我的,我会被挂的。[/code]
#include <bits/stdc++.h> using namespace std; typedef long long LL; LL acv[100100],sum[100100]; int main() { memset(acv,0,sizeof(acv)); memset(sum,0,sizeof(sum)); int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lld",&acv[i]); } sort(acv+1,acv+1+n); sum[0]=0; for(int i=1;i<=n;i++){ sum[i] = sum[i-1]+acv[i]; } int a1 = n/2; int b1 = n-n/2; LL diff1 = 0; diff1 = sum - 2*sum[a1]; int b2 = n/2; int a2 = n-n/2; LL diff2 = 0; diff2 = sum - 2*sum[a2]; if(diff1>diff2){ printf("Outgoing #: %d\n",b1); printf("Introverted #: %d\n",a1); printf("Diff = %lld\n",diff1); } else { printf("Outgoing #: %d\n",b2); printf("Introverted #: %d\n",a2); printf("Diff = %lld\n",diff2); } }
相关文章推荐
- PTA 7-15 QQ帐户的申请与登陆(25 分)map简单结合方法
- PTA| 根据后序和中序遍历输出先序遍历(25 分)
- PTA 7-29 修理牧场(25 分)优先队列的应用
- PTA 7-4 排座位(25 分)
- PTA-根据后序和中序遍历输出先序遍历(25 分)
- PTA 7-41 PAT排名汇总(25 分)结构体排序
- PTA 天梯赛初赛 7-10 排座位(25 分)
- PTA 列车调度(25 分)
- PTA 6-2 二叉树的遍历(25 分) 25分代码 (数组实现层次遍历)
- PTA 5-25 畅通工程之局部最小花费问题
- PTA 7-24 树种统计(25 分)Map应用拓展
- PTA 7-45 航空公司VIP客户查询(25 分)map查找应用
- PTA 7-2 列车调度(25 分)
- PTA 7-39 魔法优惠券(25 分)暴力枚举
- [PTA]5-25 Harry Potter's Exam (25分) (最短路径)
- PTA 7-21(排序) PAT排名汇总(25 分)25分代码
- PTA 7-19(排序) 寻找大富翁(25 分) 25分代码
- PTA 7-1 根据后序和中序遍历输出先序遍历(25 分) 递归输出
- PTA 7-5 堆中的路径(25 分)简便解法,直接简洁
- [PTA MOOC] Maximum Subsequence Sum(25 分)(也是浙大研究生机试的题)