远征【考试】

Description

寒枫将军将要带领他的部队去圣雪山消灭那里的冰龙。 部队分成了 若干个小队, 属于同一个小队的人兵种相同 。 寒枫将军有着杰出的指挥能力 , 在战斗的时候, 寒枫将军能够让所有相同兵种的人互相配合, 使 t 个相同兵种的人发挥出t2t2 的战斗力 ; 寒枫将军还能让不同兵种的人互相配合, 使整个部队的战斗力是所有兵种战斗力的和。 
例如, 部队中有 3 个小队, 分别是 5 个人的步兵小队, 3 个人的步兵小队,3 个人的骑兵小队。 那么步兵战斗力为 64, 骑兵战斗力为 9, 部队总战斗力为73。 
寒枫将军需要知道他的部队的战斗力是多少 。

Input

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

Output

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

Sample Input


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);
}
原文地址:https://www.cnblogs.com/renjianshige/p/7309788.html