试题H:答疑
题目如图所示:
思路:
将每位同学的累加时间进行排名,按照从小到大的顺序依次进入老师办公室进行答疑,计算每次的时间最后计算总和即可。
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <map>
using namespace std;
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
int n;
cin >> n;
int s[20],a[20],e[20];
for(int i = 0;i < n;i++)
cin >> s[i] >> a[i] >> e[i];
map<int,int> ma;
for(int i = 0;i < n;i++)
{
ma.insert(pair<int,int>(s[i] + a[i] + e[i],i));
}
for(map<int,int>::iterator it = ma.begin();it != ma.end();it++)
{
cout << it->first << " " << it->second << endl;
}
int mid1 = 0,mid2 = 0;
vector<int> vec;
for(map<int,int>::iterator it = ma.begin();it != ma.end();it++)
{
vec.push_back(it->second);
}
for(int i = 0;i < n;i++)
{
if(i == 0)
{
mid1 += s[vec[i]] + a[vec[i]];
//cout << "mid1:" << mid1 << endl;
}
else
{
mid1 = mid1 + s[vec[i]] + a[vec[i]] + e[vec[i - 1]];
//cout << "s[ma[i]]:" << s[ma[i]] << " a[ma[i]]:"<< a[ma[i]] << " e[ma[i - 1]]:" << e[ma[i - 1]] << endl;
//cout << "mid1:" << mid1 << endl;
}
mid2 += mid1;
//cout << "mid2:" << mid2 << endl;
}
cout << mid2 << endl;
return 0;
}