Datahub
数据改变生活

13765: 消灭冰龙

发表时间:2022-10-27 19:53

13765: 消灭冰龙

时间限制: 1 Sec   内存限制: 128 MB

题目描述

寒枫将军将要带领他的部队去圣雪山消灭那里的冰龙。

部队分成了若干个小队,属于同一个小队的人兵种相同。寒枫将军有着杰出的指挥能力,在战斗的时候,寒枫将军能够让所有相同兵种的人互相配合,使t个相同兵种的人发挥出t2的战斗力;寒枫将军还能让不同兵种的人互相配合,使整个部队的战斗力是所有兵种战斗力的和。

例如,部队中有3个小队,分别是5个人的步兵小队,3个人的步兵小队,3个人的骑兵小队。那么步兵战斗力为64,骑兵战斗力为9,部队总战斗力为73。
寒枫将军需要知道他的部队的战斗力是多少。

输入

第一行一个整数n,表示小队数。接下来n行,第i行有两个整数ai、bi,表示这个小队有ai个人,兵种为bi。

输出

一行一个整数,部队的战斗力。

样例输入 Copy

3

5 1

3 1

3 2

样例输出 Copy

73

提示

10%的数据,n=1
30%的数据,n≤1000
另有20%的数据,ai=1
另有30%的数据,bi≤1000
100%的数据,1≤n≤100000,1≤ai≤10000,1≤bi≤1,000,000,000

#include<bits/stdc++.h>

using namespace std;

struct node{

long long a,b;

}a[100005];

long long read(){

char c=getchar();long long x=0;

while(!isdigit(c)) c=getchar();

while(isdigit(c)){x=x*10+c-'0';c=getchar();}

return x;

}

bool cmp(node x,node y){return x.b<y.b;}

int main(){

long long n=read();

for(long long i=1;i<=n;i++) {a[i].a=read();a[i].b=read();}

long long ans=0;

sort(a+1,a+1+n,cmp);

for(long long i=1;i<=n;i++){

long long nowa=a[i].a;

while(i<=n&&a[i].b==a[i+1].b){nowa+=a[i+1].a;i++;}

ans+=nowa*nowa;

}

cout<<ans<<endl;

return 0;

}


文章分类: 算法例题
分享到:
QQ:258506508                                     联系电话:020-000000    000-000000                                   联系邮箱:xxx@.co.m                                     联系地址:XXX省XXX市XXX县XXX路