题意:
0:00~23:59之间的所有时间,任何时刻都会显示3或4个数字,如果某个时刻这些数字依次组成等差数列则称该时刻为好时刻。给定整数n,表示从0:00时刻起经过n分钟,求一共出现多少好时刻。
思路:
n为不超过的非负整数,如果从0遍历到n判断是否好时刻,会超时,所以先将0:00~23:59转化成分钟并计算从0:00到此时有多少好时刻,最后处理n。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include <stack>
using namespace std;
int main() {
int n, t[1500], h, m, ans = 0;
cin>>n;
t[0] = 1;
for(int i=1; i<1440; i++) {
h = i / 60; m = i % 60;
t[i] = t[i-1];
if(h < 10) {
if(m % 10 - m / 10 == m / 10 - h)
t[i] += 1;
}else {
if(m % 10 - m / 10 == m / 10 - h % 10 && m / 10 - h % 10 == h % 10 - h / 10)
t[i] += 1;
}
}
while(n >= 0) {
ans += t[n >= 1440 ? 1439 : n];
n -= 1440;
}
cout<<ans<<endl;
}