HDU 5387 Clock(分数类+模拟)
题意:
给你一个格式为hh:mm:ss的时间,问:该时间时针与分针、时针与秒针、分针与秒针之间夹角的度数是多少。
若夹角度数不是整数,则输出最简分数形式A/B,即A与B互质。
解析:
先计算出总的秒数 S=hh∗3600+mm∗60+ss
由于秒钟每秒走1°,
所以当前时间,秒钟与12点的度数为 S%360由于分针每秒走 0.1°,
既然已经计算出总秒数,那么当前时间,分针与12点的度数为 S/10%360由于时针每秒走(1/120)°。那么当前时间。时针与12点的度数为 S/120%360
然后计算出几个角度之间的绝对值。
又由于题目要求的是劣角,所以推断一下当前求出的角度的绝对值是否大于180°。
假设大于180°,就把当前角度减去180°。
注意:
每行末尾另一个空格,没有输出会PE。
my code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef __int64 type;
struct Frac {
type a, b;
Frac() {a = 0; b = 1;}
Frac(type a) {this->a = a; b = 1; }
Frac(type a, type b) {this->a = a; this->b = b; deal();}
void init() {a = 0; b = 1;}
type gcd(type a, type b) {
while (b) {
type tmp = a % b;
a = b;
b = tmp;
}
return a;
}
void deal() {
type d = gcd(a, b);
a /= d; b /= d;
if (b < 0) {
a = -a;
b = -b;
}
}
Frac operator + (Frac c) {
Frac ans;
ans.a = a * c.b + b * c.a;
ans.b = b * c.b;
ans.deal();
return ans;
}
Frac operator - (Frac c) {
Frac ans;
ans.a = a * c.b - b * c.a;
ans.b = b * c.b;
ans.deal();
return ans;
}
Frac operator * (Frac c) {
Frac ans;
ans.a = a * c.a;
ans.b = b * c.b;
ans.deal();
return ans;
}
Frac operator / (Frac c) {
Frac ans;
ans.a = a * c.b;
ans.b = b * c.a;
ans.deal();
return ans;
}
Frac operator % (Frac c) {
Frac ans;
ans.b = b * c.b;
ans.a = a * c.b % (c.a * b);
ans.deal();
return ans;
}
void absolute() {
if (a < 0) a = -a;
if (b < 0) b = -b;
}
void operator += (Frac c) {*this = *this + c;}
void operator -= (Frac c) {*this = *this - c;}
void operator *= (Frac c) {*this = *this * c;}
void operator /= (Frac c) {*this = *this / c;}
bool operator > (Frac c) {return a * c.b > b * c.a;}
bool operator == (Frac c) { return a * c.b == b * c.a;}
bool operator < (Frac c) {return !(*this < c && *this == c);}
bool operator >= (Frac c) {return !(*this < c);}
bool operator <= (Frac c) {return !(*this > c);}
bool operator != (Frac c) {return !(*this == c);}
bool operator != (type c) {return *this != Frac(c, 1);}
void operator = (type c) {this->a = c; this->b = 1;}
void put() {
if (a == 0) printf("0");
else {
if (b == 1) printf("%I64d", a);
else printf("%I64d/%I64d", a, b);
}
}
};
int t;
type hh, mm, ss;
int main() {
scanf("%d", &t);
while (t--) {
scanf("%I64d:%I64d:%I64d", &hh, &mm, &ss);
type S = hh * 3600 + mm * 60 + ss;
Frac s = Frac((S * 6) % 360);
Frac m = Frac(S, 10);
Frac h = Frac(S, 120);
m = m % Frac(360);
h = h % Frac(360);
Frac a1 = (h - m);
Frac a2 = (h - s);
Frac a3 = (m - s);
a1.absolute(); a2.absolute(); a3.absolute();
if (a1 > Frac(180)) a1 = Frac(360) - a1;
if (a2 > Frac(180)) a2 = Frac(360) - a2;
if (a3 > Frac(180)) a3 = Frac(360) - a3;
a1.put(); printf(" ");
a2.put(); printf(" ");
a3.put(); printf(" \n");
}
return 0;
}
HDU 5387 Clock(分数类+模拟)的更多相关文章
- HDU 5387 Clock (MUT#8 模拟)
[题目链接]:pid=5387">click here~~ [题目大意]给定一个时间点.求时针和分针夹角,时针和秒针夹角,分针和秒针夹角 模拟题,注意细节 代码: #include&l ...
- 多校第六场 HDU 4927 JAVA大数类+模拟
HDU 4927 −ai,直到序列长度为1.输出最后的数. 思路:这题实在是太晕了,比赛的时候搞了四个小时,从T到WA,唉--对算组合还是不太了解啊.如今对组合算比較什么了-- import java ...
- HDU 5387 Clock
题意:给一个时间,求三个时针之间的夹角,分数表示. 解法:算算算.统一了一下分母. 代码: #include<stdio.h> #include<iostream> #incl ...
- 模拟 HDOJ 5387 Clock
题目传送门 /* 模拟:这题没啥好说的,把指针转成角度处理就行了,有两个注意点:结果化简且在0~180内:小时13点以后和1以后是一样的(24小时) 模拟题伤不起!计算公式在代码内(格式:hh/120 ...
- hdu 6206 : Apple 【计算几何 + 分数类】
题目链接 比赛时C++上__float128都被卡精度,然后扔给队友用Java的BigDecimal过了 算法不多说,求三角形外心可以参考 维基百科 https://zh.wikipedia.org/ ...
- 连分数(分数类模板) uva6875
//连分数(分数类模板) uva6875 // 题意:告诉你连分数的定义.求连分数,并逆向表示出来 // 思路:直接上分数类模板.要注意ai可以小于0 #include <iostream> ...
- OC2_分数类
// // Fraction.h // OC2_分数类 // // Created by zhangxueming on 15/6/10. // Copyright (c) 2015年 zhangxu ...
- Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例
1. 自定义类模拟LineNumberReader的获取行号功能案例 2. 代码实现: (1)MyBufferedReader.java: package cn.itcast_08; import j ...
- 第十七周oj刷题——Problem B: 分数类的四则运算【C++】
Description 编写分数类Fraction,实现两个分数的加.减.乘和除四则运算.主函数已给定. Input 每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束. Outpu ...
随机推荐
- (转)Tomcat文件详解
做web项目,最常用的服务器就是Apache的tomcat.虽然一直在用tomcat,但都是仅限在使用的阶段,一直没有深入学习过.想深入学习tomcat,首推的肯定是官网:http://tomcat. ...
- 一个奇怪的Java集合问题
int size = list.size(); Integer existIndex = -1; for (int index = 0; index < size; index++) { Pho ...
- 【Codeforces Round #452 (Div. 2) B】Months and Years
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 闰,平,平 平,闰,平 平,平,闰 平,平,平 4种情况都考虑到就好. 可能有重复的情况. 但是没关系啦. [代码] #includ ...
- WPF 入门《数据绑定》
简单而言, 数据绑定是一种关系, 这种关系告诉WPF 从一个源目标对象中提取一些信息, 并且使用该信息设置为目标对象的属性.目标属性总是依赖项属性, 并且通常位于WPF元素中. 然而, 源对象可以是任 ...
- 第6章4节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串
在第2节中我们看到了MonkeySourceNetwork是怎样从Socket中获取MonkeyRunner发送过来的命令字串的,可是最后怎样将它翻译成事件的代码我们还没有进行分析,由于在那之前我们还 ...
- 51 nod 1189 阶乘分数
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1189 题目思路: 1/n! = 1/x +1/y ==> ...
- sass工具、相关插件
http://koala-app.com/index-zh.html 下载koala 把css文件夹(包含.scss后缀的文件)整个拖进去: 然后在sublime打开.scss文件编译,自动生成css ...
- Spider_basic
网络爬虫 定义:网络蜘蛛.网络机器人,抓取网络数据的程序 总结:用Python程序去模仿人去访问网站,模仿的越逼真越好 目的:通过有效的大量数据分析市场走势.公司决策 企业获取数据的方式 公司自有数据 ...
- ASP.NET MVC 入门4、Controller与Action
原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/04/1303672.html Controller是MVC中比較重要的一部分.差点儿全部的业 ...
- t_user is not mapped [from t_user as u where u.loginname = :loginname and u.password =:password]
转自:https://blog.csdn.net/u010876380/article/details/52714539 错误: Struts Problem Report Struts has de ...