PTA 甲级 1016 Phone Bills

题目链接

思路:结构体存储用户name,话费记录,其中话费记录采用pair记录每一条记录。然后用户之间按照name排序,用户的每条记录按照time从小到大排序。

1.首先找到第一条on-line,然后从该条on-line向后推远至连续的on-line的最后一个on-line,那么下一条就是off-line(如果有),这on-line和off-line就是配对的两条,计算费用即可。

2.数值计算采用零点到当前的累计和作差。

#include
#include
#include
#include
#include
#define MAXN 1010
using namespace std;
int price[25];
struct Peo{
    string name;
    vector> record;
};
struct Peo p[MAXN];
map name_id;
bool cmp(Peo a,Peo b){
    return a.name a,pair b){
    return a.first>price[i];
        price[24]+=price[i];
    }
    int n;
    cin>>n;
    int idx=0;
    for(int i=0;i>name>>t>>kind;
        if(name_id.count(name)>0){
            a=name_id[name];
        }
        else{
            name_id[name]=idx++;
            a=idx-1;
        }
        p[a].name=name;
        p[a].record.push_back(make_pair(t,kind));
    }
    //处理
    sort(p,p+idx,cmp);
    for(int i=0;i

你可能感兴趣的:(PTA,算法,c++,数据结构)