【思想】电子警察

版权声明:侵删 [email protected] https://blog.csdn.net/weixin_43350051/article/details/88084925

电子警察

时间限制: 1 Sec  内存限制: 128 MB

题目描述

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

输入

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

输出

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

扫描二维码关注公众号,回复: 5393674 查看本文章

样例输入
复制样例数据

15 30 20 3
000046SZJBB8888
030950LJSAA9999
201509RBJC7777D
样例输出

ZJBB8888
BJC7777D

思路:
1.    输入数据:使用scanf("%lld%s",&  ,& );之前在写代码时%lld %lld连续输入要加空格 但本题使用%s 由于%s不会吸收空格所以在和%lld合起来使用时输入不加空格也可以。(解决既要输入数字又要输入字符且输入时中间不用加空格的问题)。
2.    将输入的%lld也就是时间全部变为秒,便于取余。
3.    判断输入的方向(L,S,R) 也就是代码中的b[0]。
4.    判断取余后每个方向的亮绿灯时间区间:

    
    time:1-15    L亮
            16-45  S亮
            46-65(0)  R亮
            
其中65由于被取余 所以不可能得到 但如果时结果为0 也表示65 
如果具体去考虑什么时候亮的灯很容易混乱,但是只需要知道几秒的时候哪个灯在亮,足以解题。
AC代码:

#include<stdio.h>
int main()
{
    long long int a[10006],sum[10006],lt,st,rt,n,i,j,k;
    char b[10006][20];
    scanf("%lld%lld%lld%lld",&lt,&st,&rt,&n);
    for(i=0;i<n;i++){
        scanf("%lld%s",&a[i],b[i]);
    }
    for(i=0;i<n;i++){
        if(a[i]<100)
            sum[i]=a[i];
        else if(a[i]<10000)
            sum[i]=(a[i]/100)*60+a[i]%100;
        else if(a[i]<1000000)
            sum[i]=(a[i]/10000)*3600+((a[i]/100)%100)*60+a[i]%100;
    }
    for(i=0;i<n;i++){
        k=sum[i]%(lt+st+rt);
        if(b[i][0]=='L'){
     //       printf("%  lld  ",k);
            if(k>lt||k==0){
                for(j=1;j<9;j++){
                    printf("%c",b[i][j]);
                }
                printf("\n");
            }
        }
        else if(b[i][0]=='S'){
     //       printf("%  lld  ",k);
            if(k<=lt||k>st+lt){
                for(j=1;j<9;j++){
                    printf("%c",b[i][j]);
                }
                printf("\n");
            }
        }
        else if(b[i][0]=='R'){
      //      printf("%  lld  ",k);
            if(k<=st+lt&&k!=0){
                for(j=1;j<9;j++){
                    printf("%c",b[i][j]);
                }
                printf("\n");
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43350051/article/details/88084925