Description
寒枫将军将要带领他的部队去圣雪山消灭那里的冰龙。 部队分成了 若干个小队, 属于同一个小队的人兵种相同 。 寒枫将军有着杰出的指挥能力 , 在战斗的时候, 寒枫将军能够让所有相同兵种的人互相配合, 使 t 个相同兵种的人发挥出t2t2 的战斗力 ; 寒枫将军还能让不同兵种的人互相配合, 使整个部队的战斗力是所有兵种战斗力的和。
例如, 部队中有 3 个小队, 分别是 5 个人的步兵小队, 3 个人的步兵小队,3 个人的骑兵小队。 那么步兵战斗力为 64, 骑兵战斗力为 9, 部队总战斗力为73。
寒枫将军需要知道他的部队的战斗力是多少 。
Input
第一行一个整数 n, 表示小队数。
接下来 n 行, 第 i 行有两个整数 ai、 bi,表示这个小队有 ai 个人, 兵种为 bi。
Output
一行一个整数, 部队的战斗力 。
Sample Input
3
5 1
3 1
3 2
Sample Output
73
Hint
【 数据规模与约定】
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
题解:
模拟一下,map离散化一下就可以了。
代码:
#include<iostream> #include<stdio.h> #include<algorithm> #include<cstring> #include<stdlib.h> #include<map> #define ll long long using namespace std; ll from[100100]; int n,num=0; map<ll,int> mp; int main(){ memset(from,0,sizeof(from)); scanf("%d",&n); for(int i=1;i<=n;i++){ ll x,y;scanf("%lld%lld",&x,&y); if(mp[y]==0) mp[y]=++num; from[mp[y]]+=x; } ll ans=0; for(int i=1;i<=n;i++){ ans+=from[i]*from[i]; } printf("%lld",ans); }