B. Planet Lapituletti

B. Planet Lapituletti

题目

在这里插入图片描述

题目大意

给你一个时间,然后让你找到往后的时间中在镜子中的合法时间(包括给你的起始时间),然后输出真实世界中的时间。

思路

显然3,4,6,7,7,9在镜子中的时间是不合法的,所以直接跳过往后面找,分钟和时钟,二者时间变化用两重循环满足其时间变化,而镜子成像满足映射关系,用一个map存储其中的映射关系,真是世界中是从左往右读数,镜子是从右往左,所以在判断时,对应的十位与个位要交换顺序,并判断是否超过了进制,如果都没有超过进制值输出已经找到的时间,如果在循环中都没有找到,那么表明时间到了h-1:m-1;那么下一分钟00:00 肯定满足题意,直接输出00:00。

输入样例

5
24 60
12:21
24 60
23:59
90 80
52:26
1 100
00:01//刚开始这个增加时间到00:10时间在镜子中呈像为01:00,为什么不对呢,因为h=1所以时位只能是1.
10 10
04:04

输出样例

12:21
00:00
52:28
00:00
00:00

通过代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define sl(n) scanf("%lld",&n)
#define pl(n) printf("%lld",n)
#define pE printf("\n")
#define ull unsigned long long
#define pb push_back
#define pre(n) for(ll i=1;i<=n;i++)
#define rep(n) for(ll i=n;i>=1;i--)
#define pi pair<ll,ll>
char a[7]; 
ll p[5]={3,4,6,7,9};
map<ll , ll>s;
int main(){
	ll t,i,h,m,j;
	sl(t);
	s[0]=0,s[1]=1,s[2]=5,s[5]=2,s[8]=8;
	while(t--){
		sl(h),sl(m);
		ll b,b1,b2,b3;
		scanf("%s",a);
		ll temp=(a[0]-'0')*10+a[1]-'0',temp1=(a[3]-'0')*10+a[4]-'0';
		ll q=1;
		for(i=temp;i<=h-1;i++){
		bool flag1=false;
		if(i==temp)j=temp1;
		else j=0;
		for(;j<=m-1;j++){
			flag1=false;
			b=i/10,b1=i%10,b2=j/10,b3=j%10;
			for(ll k=0;k<5;k++){
			if(b==p[k]||b1==p[k]||b2==p[k]||b3==p[k]){
			flag1=true;
			}
			}	
		if(flag1)continue;
		if(s[b1]*10+s[b]<=m-1&&s[b3]*10+s[b2]<=h-1){
			cout<<b<<b1<<":"<<b2<<b3<<endl;
			q=0;
			break;
		}
		}
		if(!q)break;
		}		
		if(q)cout<<"00:00"<<endl;
		}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值