问题B:电子警察

 

                                问题B:电子警察

时间限制:1秒内存限制:128 MB
提交:1071解决:62
[ 提交 ] [ 状态 ] [ 讨论版 ] [命题人:admin ]

题目描述

现在很多地方的道路路口都安装了电子警察,即交通违章自动拍照系统。这些系统一般在路口的地下埋设感应线圈,通过传感器判断汽车是否在红灯时通过路面,来控制数码相机自动拍照。在安装这种系统需要挖掘地面,施工麻烦,成本又高。于是有人研究出了同摄像机自动识别车牌并判断违章行为的系统,这样一来,电子警察安装就方便多了,成本也大大降低。请你编程实现其中的一个功能,给出一批某一时间识别后的车牌号码及行进方向,判断该车是否违章,并记录下来违章的规则设定为:先设置左转,直行,右转依次绿灯通行时间(以秒为单位,只允许一个方向绿灯),先左转绿灯,然后直行绿灯,最后右转绿灯,在其中一个绿灯时,其余两盏灯为红灯状态,假设时间生效在零时整,且给出的数据只限定当天,闯红灯为违章。

 

输入

第1行有4个整数,以一个空格隔开,依次为左转,直行,右转通行的绿灯持续秒数和识别的车辆数N(1≤N≤10000),后面的Ñ行,表示每辆车的信息,格式为“时间+方向+车牌”,其中时间为6位数字,方向为1个字母(L表示左转,S表示直行,R表示右转),车牌为8个字符,之间没有空格。如081528LZJBB0001,表示车牌号为ZJBB0001的车辆在8时15分28秒左转。

 

输出

违章车辆的车牌号码,每辆车一行,不含空格,按输进去的先后顺序输出。

 

 

样例输入

复制样例数据

 

样例输出

 

 

 

#include<stdio.h>
#include<stdlib.h>
struct node
{
	int  s;
	char a;
	char str[100];
}*p;
int nide(int op,int k,int a,int b,int c);
int main() 
{
	int i,n,a,b,c,k;
	scanf("%d %d %d %d",&a,&b,&c,&n);
	p=(struct node*)calloc(n,sizeof(struct node));
	for(i=0;i<n;i++)
	{
		scanf("%d%c%s",&p[i].s,&p[i].a,p[i].str);
	} 
	k=a+b+c;
	for(i=0;i<n;i++)
	{
		int t=0;
		if(nide(p[i].s,k,a,b,c)==1)
		{
			if(p[i].a!='L')
			{
				printf("%s",p[i].str);
				t=1;	
			}
		}
		else
		if(nide(p[i].s,k,a,b,c)==2)
		{
			if(p[i].a!='S')
			{
				printf("%s",p[i].str);
				t=1;
			}
		}
		else if(nide(p[i].s,k,a,b,c)==3)
		{
			if(p[i].a!='R')
			{
				printf("%s",p[i].str);
				t=1;
			}
		}
		if(i!=n-1&&t==1)
		printf("\n");
	}
	return 0;
}
int nide(int op,int k,int a,int b,int c)
{
	int h,min,s;
	s=op%100;
	min=(op/100)%100;
	h=op/10000;
	int sum;
	sum=(h*60*60+min*60+s)%k;
	if(sum>0&&sum<=a) 
	{
		return 1;
	}
	else if(sum>a&&sum<=a+b)
	{
		return 2;
	}
	else if(sum>a+b&&sum<(a+b+c)||sum==0)
	{
		return 3;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值