CF1692D The Clock 题解

文章描述了一个编程竞赛题目,要求计算从给定的24小时制时间开始,每隔特定分钟数查看时间时,能看到多少个回文时间点。回文时间点是指时钟显示的时间正读和反读都相同,如13:31或21:12。解决方案涉及时间处理和模拟。
摘要由CSDN通过智能技术生成

题目

链接

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

materialistOier

我只是一名ssfoier

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值