题目
链接
https://www.luogu.com.cn/problem/CF1692D
字面描述
题面翻译
题目描述
从一个24
小时制的时间点开始,每隔
x
x
x 分钟看一次手表,求到重新看到此时间点为止一共看到了多少个回文时间点。
回文时间点:诸如13:31
,25:52
等时间点。
输入
第一行一个数 T T T 表示数据组数,
接下来
T
T
T 行每行一个时间点 xx:xx
和时间间隔
x
x
x ,使用空格分隔。
输出
对于每一组数据,输出一个 a n s ans ans 表示看到的回文时间点的数量。
题目描述
Victor has a 24-hour clock that shows the time in the format “HH:MM” (00 $ \le $ HH $ \le $ 23, 00 $ \le $ MM $ \le $ 59). He looks at the clock every $ x $ minutes, and the clock is currently showing time $ s $ .
How many different palindromes will Victor see in total after looking at the clock every $ x $ minutes, the first time being at time $ s $ ?
For example, if the clock starts out as 03:12 and Victor looks at the clock every $ 360 $ minutes (i.e. every $ 6 $ hours), then he will see the times 03:12, 09:12, 15:12, 21:12, 03:12, and the times will continue to repeat. Here the time 21:12 is the only palindrome he will ever see, so the answer is $ 1 $ .
A palindrome is a string that reads the same backward as forward. For example, the times 12:21, 05:50, 11:11 are palindromes but 13:13, 22:10, 02:22 are not.
输入格式
The first line of the input contains an integer $ t $ ( $ 1 \leq t \leq 100 $ ) — the number of test cases. The description of each test case follows.
The only line of each test case contains a string $ s $ of length $ 5 $ with the format “HH:MM” where “HH” is from “00” to “23” and “MM” is from “00” to “59” (both “HH” and “MM” have exactly two digits) and an integer $ x $ ( $ 1 \leq x \leq 1440 $ ) — the number of minutes Victor takes to look again at the clock.
输出格式
For each test case, output a single integer — the number of different palindromes Victor will see if he looks at the clock every $ x $ minutes starting from time $ s $ .
样例 #1
样例输入 #1
6
03:12 360
00:00 1
13:22 2
15:15 10
11:11 1440
22:30 27
样例输出 #1
1
16
10
0
1
1
提示
The first test case is explained in the statement.
代码实现
大模拟+时间反转比较计数
#include<bits/stdc++.h>
using namespace std;
int t,st,ed,op,ans;
char l;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d %c%d%d",&st,&l,&ed,&op);
int x=st,y=ed;
bool flag=false;
ans=0;
while((x!=st||y!=ed)||!flag){
flag=true;
y+=op;
x=x+y/60;
y%=60;
x%=24;
int p=10*(x%10)+x/10;
if(p==y)++ans;
}
printf("%d\n",ans);
}
return 0;
}