问题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;
}
}