自认为比较简单的做法
查看原帖
自认为比较简单的做法
501028
spider_oyster楼主2022/10/18 18:05
#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];
}
2022/10/18 18:05
加载中...