这道题做的特么想吐血,还是不完全对只得了15分 留着以后再看吧。
根本不难,就是太复杂也不知道哪里做错了!!!!直接就是想爆粗口。
烦死了 这次可真伤
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
#define INF 0x6fffffff
struct node {
string name,line;
int month, day, h, min;
int sum;
node(int x,int y,int z,int q){
month = x;
day = y;
h = z; min = q;
sum = day * 1440 + h * 60 + min;
}
};
bool cmp(node x, node y)
{
return x.sum<y.sum;
}
void solver(vector<node> vec,int i,double acount) {
char time[4][2];
char time1[4][2];
memset(time, 0, sizeof(time));
int t[4] = { vec[i].month,vec[i].day,vec[i].h,vec[i].min };
int t1[4] = { vec[i+1].month,vec[i+1].day,vec[i+1].h,vec[i+1].min };
for (int j = 0; j < 4; j++)
{
int a = t[j] % 10;
int b = t[j] / 10;
int c = t1[j] % 10;
int d = t1[j] / 10;
time[j][0] = '0' + b;
time[j][1] = '0' + a;
time1[j][0] = '0' + d;
time1[j][1] = '0' + c;
}
double p = acount / 100;
printf("%c%c:%c%c:%c%c %c%c:%c%c:%c%c %d ",time[1][0],time[1][1],time[2][0], time[2][1],time[3][0],time[3][1],time1[1][0], time1[1][1],time1[2][0], time1[2][1],time1[3][0], time1[3][1],vec[i+1].sum-vec[i].sum);
cout << "$";
printf("%.2f\n", p);
}
int cost[25],n;
map<string, vector<node> > bill;
int main()
{
for (int i = 1; i <= 24; i++)
{
cin >> cost[i];
}
cin >> n;
for (int i = 0; i < n; i++)
{
string na,nf;
int a[4];
cin >> na;
for (int j = 0; j < 4; j++)
{
cin >> a[j];
getchar();
}
cin >> nf;
node c = node(a[0], a[1], a[2], a[3]);
c.name = na;
c.line = nf;
bill[na].push_back(c);
}
map<string, vector<node> >::iterator it;
for (it = bill.begin(); it != bill.end(); it++)
{
vector<node> vec;
vec = it->second;
sort(vec.begin(), vec.end(), cmp);
int acont=0;
double total=0;
bool flag = false;
for (int i = 0;i<vec.size()&&(i + 1)<vec.size();)
{ //计算输出
if (vec[i].line[1] == 'n'&&vec[i+1].line[1] == 'f')
{
if (!flag)
{
char Name[2];
Name[0] = '0' + vec[i].month / 10;
Name[1] = '0' + vec[i].month % 10;
cout << vec[i].name << " " << Name[0] << Name[1] << endl;
flag = true;
}
int j = vec[i].sum, h = vec[i].h;
if (vec[i + 1].sum - j < 60 - (j % 60))
{
acont = cost[h+1] * (vec[i + 1].sum - j);
j = j + vec[i + 1].sum - j;
h++;
}
else {
acont = cost[h+1] * (60 - j % 60);
j = j + (60 - j % 60);
h++;
}
for (; j < vec[i + 1].sum; h=(++h) % 24)
{
if (j + 60 <= vec[i + 1].sum)
{
acont += (cost[h+1] * 60);
j += 60;
}
else if (j + 60 > vec[i + 1].sum)
{
acont += cost[h+1] * (vec[i + 1].sum % 60);
j += vec[i + 1].sum % 60;
}
}
total += acont;
solver(vec,i,acont);
i += 2;
}
else
{
i++;
}
}
if (flag == true)
{
printf("Total amount: $");
printf("%.2f\n", total / 100);
}
}
return 0;
}