hdu 5387 Clock(分数)

582 篇文章 0 订阅

题目链接:hdu 5387 Clock


#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long type;

struct Fraction {
	type mem; // 分子;
	type den; // 分母;

	bool operator < (const Fraction& u) const;
	bool operator > (const Fraction& u) const {
		return u < *this;
	}
	Fraction (type mem = 0, type den = 1);
	void operator = (type x) { this->set(x, 1); }
	Fraction operator * (const Fraction& u);
	Fraction operator / (const Fraction& u);
	Fraction operator + (const Fraction& u);
	Fraction operator - (const Fraction& u);

	void set(type mem, type den);
	void put () {
		if (mem == 0) {
			printf("0");
		} else {
			printf("%lld", mem);
			if (den != 1)
				printf("/%lld", den);
		}
		printf(" ");
	}
};

inline type gcd (type a, type b) {
	return b == 0 ? (a > 0 ? a : -a) : gcd(b, a % b);
}

inline type lcm (type a, type b) {
	return a / gcd(a, b) * b;
}

/*Code*/
const type H = 12 * 60 * 60;
const type M = 60 * 60;
const type S = 60;

int main () {
	Fraction O = Fraction(180, 1);
	Fraction T = Fraction(360, 1);
	int cas;
	scanf("%d", &cas);
	while (cas--) {
		int h, m, s;
		scanf("%d:%d:%d", &h, &m, &s);
		h %= 12;

		Fraction tmp;
		Fraction hp = Fraction((h * M + m * S + s) * 360, H);
		Fraction mp = Fraction((m * S + s) * 360, M);
		Fraction sp = Fraction(s * 360, S);

		if (hp > mp)
			tmp = hp - mp;
		else
			tmp = mp - hp;

		if (tmp > O)
			tmp = T - tmp;
		tmp.put();


		if (hp > sp)
			tmp = hp - sp;
		else
			tmp = sp - hp;

		if (tmp > O)
			tmp = T - tmp;
		tmp.put();


		if (mp > sp)
			tmp = mp - sp;
		else
			tmp = sp - mp;

		if (tmp > O)
			tmp = T - tmp;
		tmp.put();
		printf("\n");
	}
	return 0;
}

bool Fraction::operator < (const Fraction& u) const {
	return mem * u.den < u.mem * den;
}

Fraction::Fraction (type mem, type den) {
	this->set(mem, den);
}

Fraction Fraction::operator * (const Fraction& u) {
	type tmp_p = gcd(mem, u.den);
	type tmp_q = gcd(u.mem, den);
	return Fraction( (mem / tmp_p) * (u.mem / tmp_q), (den / tmp_q) * (u.den / tmp_p) );
}

Fraction Fraction::operator / (const Fraction& u) {
	type tmp_p = gcd(mem, u.mem);
	type tmp_q = gcd(den, u.den);
	return Fraction( (mem / tmp_p) * (u.den / tmp_q), (den / tmp_q) * (u.mem / tmp_p));
}

Fraction Fraction::operator + (const Fraction& u) {
	type tmp_l = lcm (den, u.den);
	return Fraction(tmp_l / den * mem + tmp_l / u.den * u.mem, tmp_l);
}

Fraction Fraction::operator - (const Fraction& u) {
	type tmp_l = lcm (den, u.den);
	return Fraction(tmp_l / den * mem - tmp_l / u.den * u.mem, tmp_l);
}

void Fraction::set (type mem, type den) {

	if (den == 0) {
		den = 1;
		mem = 0;
	}

	type tmp_d = gcd(mem, den);
	this->mem = mem / tmp_d;
	this->den = den / tmp_d;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值