P13849 题解

· · 题解

题目传送门

思路

题目要求按字典序输出每一个人工作时长的差异,不难想到可以用 map 存下每个人的工作时间。第一份排班表用负数存,第二份排班表用正数存。

由于 map 按照字典序存储,我们可以直接遍历 map,若某个元素不为 0,就说明这个人的工作时间变了,输出即可。

考虑一下输入问题。由于存在 -----=====,不方便直接存储,可以考虑统一用字符串存储,转化成整数可以用 stoi 函数。

AC CODE

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s;
    int f=-1;
    map<string,int>mp;
    while(true){
        cin>>s;
        if(s=="------"){
            f=1;
            continue;
        }
        if(s=="======")
            break;
        int l=stoi(s);
        cin>>s;
        int r=stoi(s);
        cin>>s;
        mp[s]+=f*(r-l);
    }
    bool flag=true;
    for(auto[str,val]:mp)
        if(val){
            cout<<str<<" ";
            if(val<0)
                cout<<val<<"\n";
            else cout<<"+"<<val<<"\n";
            flag=false;
        }
    if(flag)
        cout<<"No differences found.\n";
    return 0;
}