错误代码记录1095 Cars on Campus (30 分)

#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<bits/stdc++.h>

using namespace std;
typedef struct MyStruct
{

	char name[8];
	int hh;
	int mm;
	int ss;
	bool isIn;
}Car;
bool cmp1(Car c1, Car c2)
{
	float t=strcmp(c1.name, c2.name);
	if (t != 0)
		return t<0;
	if (c1.hh != c2.hh)
		return c1.hh < c2.hh;
	else if (c1.mm != c2.mm)
		return c1.mm < c2.mm;
	else
		return c1.ss < c2.ss;
}
bool cmp3(Car c1, Car c2)
{
	
	if (c1.hh != c2.hh)
		return c1.hh < c2.hh;
	else if (c1.mm != c2.mm)
		return c1.mm < c2.mm;
	else
		return c1.ss < c2.ss;
}
bool cmp2(string a,string b)
{
	return a > b;
}
typedef struct mystr
{
	int hh;
	int mm;
	int ss;
}Date;
Date getDateDis(Date d1, Date d2)
{
	Date ans;
	if (d1.ss > d2.ss)
	{
		ans.ss = d1.ss - d2.ss;
	}
	else {
		ans.ss = d1.ss +60- d2.ss;
		d1.mm--;
	}
	if (d1.mm > d2.mm)
	{
		ans.mm = d1.mm - d2.mm;
	}
	else {
		ans.mm = d1.mm + 60 - d2.mm;
		d1.hh--;
	}
	ans.hh = d1.hh - d2.hh;
	return ans;

}
bool isD1bigger(Date d1, Date d2)
{
	if (d1.hh != d2.hh)
	{
		return d1.hh > d2.hh;
	}
	else if (d1.mm != d2.mm)
		return d1.mm > d2.mm;
	else
		return d1.ss > d2.ss;

}
int switchTime(int hh, int mm, int ss)
{
	return hh * 3600 + mm * 60 + ss;
}
int main()
{
	
	int N,M;

	vector<Car>allcars,validcars;
	scanf("%d %d", &N,&M);
	int temp = N;
	while (temp--) {
		Car car;
		scanf("%s %d:%d:%d", &car.name, &car.hh, &car.mm, &car.ss);
		char str[5];

		scanf("%s", str);
		char str1[5] = "in";
		if (strcmp(str, str1)==0)
		{
			car.isIn = true;

		}
		else {
			
			car.isIn = false;
			
		}
		allcars.push_back(car);
	}
	sort(allcars.begin(),allcars.end(),cmp1);
	map<string, int> CDmap;
	Car parkCars;
	int current=1, last=0;
	//bool lastisout=cars[last].isIn;
	while (current < allcars.size())
	{
		if (allcars[last].isIn && !allcars[current].isIn&&strcmp(allcars[last].name, allcars[current].name) == 0)
		{
			validcars.push_back(allcars[last]);
			validcars.push_back(allcars[current]);
			/*Date d1, d2;
			d1.hh = allcars[current].hh;
			d1.mm = allcars[current].mm;
			d1.ss = allcars[current].ss;
			d2.hh = allcars[last].hh;
			d2.mm = allcars[last].mm;
			d2.ss = allcars[last].ss;
			Date dis = getDateDis(d1, d2);
			int t=switchTime(dis.hh,dis.mm,dis.ss);*/

			int d1= switchTime(allcars[current].hh, allcars[current].mm, allcars[current].ss);
			int d2= switchTime(allcars[last].hh, allcars[last].mm, allcars[last].ss);

			int t = d1 - d2;
			//map<string, int>::iterator it = CDmap.find(string(allcars[current].name));
			if (CDmap.count(allcars[current].name) == 0)
			{
				CDmap[string(allcars[current].name)] = 0;
			}
			CDmap[string(allcars[current].name)] += t;
			

		}
		current++;
		last++;
		
	}
	sort(validcars.begin(), validcars.end(), cmp3);
 	while (M--)
	{
		Date d;
		scanf("%d:%d:%d", &d.hh, &d.mm, &d.ss);
		int dt = switchTime(d.hh, d.mm, d.ss);
		int cnt = 0;
		for (int i = 0; i < validcars.size(); i++)
		{
			Date cd;
			cd.hh = validcars[i].hh;
			cd.mm = validcars[i].mm;
			cd.ss = validcars[i].ss;
			int cdt = switchTime(validcars[i].hh, validcars[i].mm, validcars[i].ss);
			//if (!isD1bigger(cd, d))
			if (cdt<=dt)
			{
				if (validcars[i].isIn)
				{
					cnt++;
				}
				else {
					cnt--;
				}
			}
		}
		printf("%d\n", cnt);
	}
	
	
	vector<string> names;
	Date bigDatest;
	bigDatest.hh = 0;
	bigDatest.mm = 0;
	bigDatest.ss = 0;
	int maxx = 0;
	for (map<string, int>::iterator it = CDmap.begin(); it != CDmap.end(); it++)
	{
		
		if (it->second> maxx)
		{
			maxx = it->second;
		}
	}

	for (map<string, int>::iterator it = CDmap.begin(); it != CDmap.end(); it++)
	{
		
		if (it->second==maxx)
		{
			names.push_back(it->first);
		}
	}
	sort(names.begin(), names.end(), cmp2);
	for (int i = 0; i < names.size(); i++)
	{
		if (i > 0)
			printf(" ");
		printf("%s", names[i].c_str());
		
	}
	printf(" %02d:%02d:%02d", maxx/3600, maxx%3600/60, maxx %60);
	
	return 0;
}

0 5原因

bool cmp2(string a,string b)
{
	return a > b;
}

1.害怕直接a>b出问题

每次就直接用这个 ,保证头文件

#include<cstdio>
#include<bits/stdc++.h>

就行

 2.根本没仔细对测试案例

 

超时原因

没用这个条件 

while (M--)
	{
		Date d;
		scanf("%d:%d:%d", &d.hh, &d.mm, &d.ss);
		int dt = switchTime(d.hh, d.mm, d.ss);
		int cnt = 0;
		for (int i = 0; i < validcars.size(); i++)
		{
			Date cd;
			cd.hh = validcars[i].hh;
			cd.mm = validcars[i].mm;
			cd.ss = validcars[i].ss;
			int cdt = switchTime(validcars[i].hh, validcars[i].mm, validcars[i].ss);
			//if (!isD1bigger(cd, d))
			if (cdt<=dt)
			{
				if (validcars[i].isIn)
				{
					cnt++;
				}
				else {
					cnt--;
				}
			}
		}
		printf("%d\n", cnt);
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值