グループに分けられた7-5人(25ポイント)
ソーシャルネットワークでは、すべての人の「活動」を定義します。次に、この指標に基づいて、人口を2つのカテゴリ、つまり外向性(非常にアクティブ)と内向性(低アクティブ)に分類したいと考えています。2つのグループのサイズをできるだけ小さくし、全体のアクティビティ間のギャップをできるだけ大きくする必要があります。
入力フォーマット:
最初の行を入力して、正の整数N(2≤N≤105)を指定します。次の行は、スペースで区切られた、各人の活動であるN個の正の整数を示しています。タイトルは、これらの数値とその合計が231を超えないことを保証します。
出力フォーマット:
次の形式で出力します。
Outgoing #: N1
Introverted #: N2
Diff = N3
それらの中にN1
は、外向N2
性の数、内向性の数N3
、2つのグループの合計活動の差の絶対値があります。
入力例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
試験の質問:スケールはできるだけ近くにある必要があります--->偶数、外側の内側の半分、奇数、内側より外側に1つ(アクティブな値はできるだけ大きくする必要があります)。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[100100];
for(int i=1;i<=n;++i)
{
cin>>a[i];
}
sort(a+1,a+n+1);
int sum,m,sum1=0,sum2=0;
m=n/2;//‘/’直接向下取整
for(int i=1;i<=m;++i)
{
sum1+=a[i];
}//前m项和
for(int i=m+1;i<=n;++i)
{
sum2+=a[i];
}//剩下项之和
sum=sum2-sum1;//求差
printf("Outgoing #: %d\n",n-m);
printf("Introverted #: %d\n",m);
printf("Diff = %d\n",abs(sum));//输出活跃程度绝差的对值
return 0;
}