zoj3131 Digital Clock(2)

TLE了四次,终于过了,880ms哭哭哭。。。真不容易啊!!!

#include<stdio.h>
int xx(char x,char y)
{
    return (x-48)*10+y-48;
}
int main()
{
    int n,num,i,j,k,x,y,p,px,py,aa[86405],hh1,mm1,ss1,hh2,mm2,ss2;
    char a[9],b[9];
    
    p=0;  
    for(i=0;i<=23;i++)
      for(j=0;j<=59;j++)
        for(k=0;k<=59;k++)
        {
           if((i*10000+j*100+k)%3==0)
              aa[p++]=1;
           else
             aa[p++]=0;
        }    
                       
    scanf("%d",&n);                                         
    while(n--)
    {
       getchar();
       scanf("%s%s",a,b);
       hh1=xx(a[0],a[1]);  hh2=xx(b[0],b[1]);
       mm1=xx(a[3],a[4]);  mm2=xx(b[3],b[4]);
       ss1=xx(a[6],a[7]);  ss2=xx(b[6],b[7]);
       
       x=hh1*10000+mm1*100+ss1;
       y=hh2*10000+mm2*100+ss2;
       
       px=ss1+mm1*60+hh1*3600;
       py=ss2+mm2*60+hh2*3600;
       
       num=0;
       if(x<=y)
       {
         for(i=px;i<=py;i++)
             if(aa[i]==1)
               num++;  
       }
       else
       {
           for(i=px;i<86400;i++)
             if(aa[i]==1)
               num++;
           for(j=0;j<=py;j++)
             if(aa[j]==1)
               num++;    
       }
       printf("%d\n",num);
    }
    return 0;
}         


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值