代码1:
#include<iostream>
#include<sstream>
#include<map>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=24;
const int M=1010;
map<string,int>res;
double a[N];
string b[3];
const int P=31*1440+10;
double S[P];
struct orign{
string name;
string line;
int sum;
int h,m,s;
int month;
string time;
}A[M];
bool cmp(orign a,orign b){
if(a.name!=b.name)
return a.name<b.name;
else{
return a.sum<b.sum;
}
}
int main(){
for(int i=0;i<24;i++)
cin>>a[i];
for(int i=1;i<P;i++)
S[i]=S[i-1]+a[((i-1)%1440)/60]/100;
string s;
int k=0;
int n;
cin>>n;
getchar();
while(getline(cin,s)){
istringstream temp(s);
string tt;
int j=0;
while(temp>>tt)
b[j++]=tt;
for(int i=0;i<3;i++){
switch (i){
case 0:{
A[k].name=b[i];
res[b[i]]++;
break;
}
case 1:{
string re=b[i];
sscanf(re.c_str(),"%d:%d:%d:%d",&A[k].month,&A[k].h,&A[k].m,&A[k].s);
A[k].sum=60*A[k].m+A[k].s+24*60*A[k].h;
sprintf(A[k].time,"%02d:%02d:%02d",A[k].h,A[k].m,A[k].s);//格式化某个变量
break;
}
case 2:{
A[k].line=b[i];
break;
}
}
}
k++;
}
sort(A,A+n,cmp);
for(int i=0;i<n;i++){
string name=A[i].name;
int j=i;
int flag=0;
double Av=0;
while((A[j].name==name)&&(j<n)){
int st=0;
if((j<n-1)&&(A[j+1].name==name)&&(A[j].line=="on-line"&&A[j+1].line=="off-line")){
if(flag==0){
cout<<A[j].name<<' ';
printf("%02d\n",A[j].month);
}
double av;
av=S[A[j+1].sum]-S[A[j].sum];
st=A[j+1].sum-A[j].sum;
printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2lf\n",
A[j].h,A[j].m,A[j].s,A[j+1].h,A[j+1].m,A[j+1].s,st,av);
Av+=av;
flag=1;
}
j++;
}
if(flag)
printf("Total amount: $%.2lf\n",Av);
i=j-1;
}
return 0;
}
代码2—》y总
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
const int N = 1010, M = 31 * 1440 + 10;
int n;
int cost[24]; // 每个时间段的话费
double sum[M]; // 从当月1号00:00开始到每个时刻所花费的钱数
struct Record
{
int minutes;
string state;
string format_time;
bool operator< (const Record& t) const
{
return minutes < t.minutes;
}
};
map<string, vector<Record>> persons;
int main()
{
for (int i = 0; i < 24; i ++ ) cin >> cost[i];
for (int i = 1; i < M; i ++ ) sum[i] = sum[i - 1] + cost[(i - 1) % 1440 / 60] / 100.0;
cin >> n;
char name[25], state[10], format_time[20];
int month, day, hour, minute;
for (int i = 0; i < n; i ++ )
{
scanf("%s %d:%d:%d:%d %s", name, &month, &day, &hour, &minute, state);
sprintf(format_time, "%02d:%02d:%02d", day, hour, minute);
int minutes = (day - 1) * 1440 + hour * 60 + minute;
persons[name].push_back({minutes, state, format_time});
}
for (auto &person : persons)
{
auto name = person.first;
auto records = person.second;
sort(records.begin(), records.end());
double total = 0;
for (int i = 0; i + 1 < records.size(); i ++ )
{
auto a = records[i], b = records[i + 1];
if (a.state == "on-line" && b.state == "off-line")
{
if (!total) printf("%s %02d\n", name.c_str(), month);
cout << a.format_time << ' ' << b.format_time;
double c = sum[b.minutes] - sum[a.minutes];
printf(" %d $%.2lf\n", b.minutes - a.minutes, c);
total += c;
}
}
if (total) printf("Total amount: $%.2lf\n", total);
}
return 0;
}