人は集団でcc++(ソーシャルネットワークでは一人一人に「活躍度」を定義しています)
1925 ワード
タイトルの要件:
ソーシャルネットワークでは、一人一人に「活発度」を定義し、この指標に基づいて、外向型(outgoing、すなわち活発度が高い)と内向型(introverted、すなわち活発度が低い)の2つに分類したいと考えています.2つのグループの規模ができるだけ接近し、彼らの総活発度の差ができるだけ開くことを要求している.
入力形式:
最初の行を入力すると、正の整数N(2≦N≦10 5)が与えられる.その後の行には、それぞれの人の活躍度であり、その間をスペースで区切ったN個の正の整数が与えられる.テーマはこれらの数字とそれらの和が231を超えないことを保証します.
出力フォーマット:次の形式で出力します.
Outgoing #: N1 Introverted #: N2 Diff = N3
このうちN 1は外向型の人の数である.N 2は内向型人間の個数である.N 3は両グループの総活躍度の差の絶対値である.
サンプル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
この問題の最も肝心な一言は、2つのグループの規模ができるだけ接近し、彼らの総活発度の差ができるだけ開くことを要求している.人間の活躍度を小さい頃から大きく並べて、真ん中から切り離すことです.Nは偶数で、言いやすいです;Nは奇数でも難しくない.考えが正しい限り.道が長いのを恐れない.コードは次のとおりです.
こんなに簡単です......これはあなたの考えが正しいです.
強さと自信を一身に集めたシイタケの涼しさ.
ソーシャルネットワークでは、一人一人に「活発度」を定義し、この指標に基づいて、外向型(outgoing、すなわち活発度が高い)と内向型(introverted、すなわち活発度が低い)の2つに分類したいと考えています.2つのグループの規模ができるだけ接近し、彼らの総活発度の差ができるだけ開くことを要求している.
入力形式:
最初の行を入力すると、正の整数N(2≦N≦10 5)が与えられる.その後の行には、それぞれの人の活躍度であり、その間をスペースで区切ったN個の正の整数が与えられる.テーマはこれらの数字とそれらの和が231を超えないことを保証します.
出力フォーマット:次の形式で出力します.
Outgoing #: N1 Introverted #: N2 Diff = N3
このうちN 1は外向型の人の数である.N 2は内向型人間の個数である.N 3は両グループの総活躍度の差の絶対値である.
サンプル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
この問題の最も肝心な一言は、2つのグループの規模ができるだけ接近し、彼らの総活発度の差ができるだけ開くことを要求している.人間の活躍度を小さい頃から大きく並べて、真ん中から切り離すことです.Nは偶数で、言いやすいです;Nは奇数でも難しくない.考えが正しい限り.道が長いのを恐れない.コードは次のとおりです.
#include
#include
#include//memset()
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 = sum[n] - 2*sum[a1];//
LL diff2 = sum[n] - 2*sum[b1];//
if(diff1>diff2){//
printf("Outgoing #: %d
",b1);
printf("Introverted #: %d
",a1);
printf("Diff = %lld
",diff1);
}
else
{
printf("Outgoing #: %d
",a1);
printf("Introverted #: %d
",a1);
printf("Diff = %lld
",diff2);
}
}
こんなに簡単です......これはあなたの考えが正しいです.
強さと自信を一身に集めたシイタケの涼しさ.