链接:https://www.nowcoder.com/acm/contest/135/J
来源:牛客网
题目描述
Apojacsleam是一个喜欢特殊时刻的人。
他定义了一个时刻,若电子表显示ab:ba(24小时制),则该时刻为“回文时刻”(可以有前导零)。例如00:00就是回文时刻。
给定一个时刻,求此时刻的上一个和下一个回文时刻。
J题附加:00:00就是24:00,没有24:00这一时刻
J题附加:输入可能有前导0,输出不含前导0,例如10:1的意思是10:01,而10:10的输出为10:10
输入描述:
两个正整数,用“:”隔开,表示小时和分钟,保证输入时间合法。
输出描述:
两行,两个时刻(不含前导0),用“:”隔开,表示上一个时刻和下一个时刻
示例1
输入
09:33
输出
5:50 10:1
示例2
输入
23:32
输出
22:22 0:0
思路:
判断来判断去不如打个表来得快。
代码:
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
map<int,int> m;
int main()
{
m[1]=10;
m[2]=20;
m[3]=30;
m[4]=40;
m[5]=50;
m[10]=1;
m[11]=11;
m[12]=21;
m[13]=31;
m[14]=41;
m[15]=51;
m[20]=2;
m[21]=12;
m[22]=22;
m[23]=32;
m[0]=0;
int a,b;
while(scanf("%d:%d",&a,&b)!=EOF){
if(m.count(a)){
if(b>m[a])
{
printf("%d:%d\n",a,m[a]);
int i=1;
while(!m.count((a+i)%24))
{
i++;
}
printf("%d:%d\n",(a+i)%24,m[(a+i)%24]);
}
else if(b<m[a])
{
int i=1;
while(!m.count(a-i))
{
i++;
}
printf("%d:%d\n",a-i,m[a-i]);
printf("%d:%d\n",a,m[a]);
}
else{
int i=1;
while(!m.count(a-i))
{
i++;
}
printf("%d:%d\n",a-i,m[a-i]);
i=1;
while(!m.count((a+i)%24))
{
i++;
}
printf("%d:%d\n",(a+i)%24,m[(a+i)%24]);
}
}
if(!m.count(a))
{
int i=1;
while(!m.count(a-i))
{
i++;
}
printf("%d:%d\n",a-i,m[a-i]);
i=1;
while(!m.count(a+i))
{
i++;
}
printf("%d:%d\n",a+i,m[a+i]);
}}
return 0;
}