一个 hh:mm 格式的时间,使用 24 小时制(即 23:59+00:01 = 00:00)。
定义“幸运时间”为 hh:mm 中包含数字 7 的时间,例如 17:01/00:17 等。
表上当前的时间点为 hh:mm,如果 hh:mm 不是幸运时间,就把表往前调 x 分钟,直到调至幸运时间为止,求最少需要调多少次。


我的代码(90 pts,一个点 WA):
#include<bits/stdc++.h>
using namespace std;
map<pair<int,int>,int>s;
signed main()
{
int x;
scanf("%d",&x);
int h = x/60,m = x%60;
h%=60;
int a,b;
scanf("%d %d",&a,&b);
s[{a,b}] = 1;
int cnt = 0;
while(1)
{
string w = to_string(a);
string q = to_string(b);
bool flag1 = 0,flag2 = 0;
for(int i = 0;i<w.size();i++)
{
if(w[i] == '7')
{
flag1 = 1;
break;
}
}
for(int i = 0;i<q.size();i++)
{
if(q[i] == '7')
{
flag2 = 1;
break;
}
}
if(flag1||flag2)
{
break;
}
int jinwei = b-m>=0?0:1;
b = b-m>=0?b-m:60+(b-m);
a = a-h-jinwei>=0?a-h-jinwei:24+(a-h)-jinwei;
if(s.find({a,b})!=s.end())
{
printf("No Solution");
return 0;
}
s[{a,b}] = 1;
cnt++;
}
printf("%d",cnt);
return 0;
}