#include<bits/stdc++.h>
using namespace std;
int T,t;
int num[13]={0,1,6,11,15,19,22,25,27,29,30,30,31};//打表,12:00往后i小时的回文数(得表代码在后)
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&t);
int day=t/720,hour=t%720/60;//过了多少个半天,多少个小时
long long ans=day*num[12]+num[hour];
int a=hour/10,b=hour%10,c,d;
if(hour==0) a=1,b=2;
for(int i=0;i<=t%60;i++)//计算当前小时往后t%60分钟的回文数
{
c=i/10,d=i%10;
if((!a&&b-c==c-d)||(a&&a-b==b-c&&b-c==c-d))
ans++;
}
printf("%d\n",ans);
}
return 0;
}
这样打表:
for(int i=0;i<=11;i++)
{
int a=i/10,b=i%10,c,d;
if(i==0) a=1,b=2;
for(int j=0;j<60;j++)
{
int c=j/10,d=j%10;
if((!a&&b-c==c-d)||(a&&a-b==b-c&&b-c==c-d))
num[i+1]++;
}
num[i+1]+=num[i];
}