zoukankan      html  css  js  c++  java
  • noip模拟赛 铺瓷砖

    【问题描述】
    有一面很长很长的墙。 你需要在这面墙上贴上两行瓷砖。 你的手头有两种不同尺寸的瓷
    砖, 你希望用这两种瓷砖各贴一行。瓷砖的长可以用分数表示,贴在第一行的每块瓷砖长度
    为A/B贴在第二行的每块瓷砖长度为C/D.
    本问题中你并不需要关心瓷砖的宽度。

    如上图所示, 两排瓷砖从同一起始位置开始向右排列,两排瓷砖的第一块的左端的缝隙
    是对齐的。 你想要知道, 最短铺多少距离后, 两排瓷砖的缝隙会再一次对齐。
    【输入】
    输入的第 1 行包含一个正整数 T,表示测试数据的组数。
    接下来 T 行, 每行 4 个正整数 ABCD,表示该组测试数据中,两种瓷砖的长度分别为A/B,C/D.

    【输出】
    输出包含 T 行, 第 i 行包含一个分数或整数, 表示第 i 组数据的答案。 如果答案为分数,
    则以“X/Y”的格式输出,不含引号。分数必须化简为最简形式。如果答案为整数,则输出
    一个整数 X
    【输入输出样例 1

    tile.in tile.out
    2
    1 2 1 3
    1 2 5 6
    1
    5/2


    见选手目录下的 tile/tile1.in tile/tile1.out
    【输入输出样例 1 说明】
    对于第一组数据,第一行瓷砖贴 2 块,第二行贴 3 块,总长度都为 1,即在距离起始位
    置长度为 1 的位置两行瓷砖的缝隙会再次对齐。
    对于第二组数据, 第一行瓷砖贴 5 块,第二行贴 3 块,总长度都为5/2

    分析:实际上就是求最小公倍数.分数的话先通分,然后对分子求最小公倍数就可以了,注意爆int.

    #include <map>
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    ll T, a, b, c, d;
    
    ll gcd(ll a, ll b)
    {
        if (!b)
            return a;
        return gcd(b, a % b);
    }
    
    int main()
    {
        scanf("%lld", &T);
        while (T--)
        {
            scanf("%lld%lld%lld%lld", &a, &b, &c, &d);
            ll t, t2;
                t = b / gcd(b, d) * d;
            a *= (t / b);
            c *= (t / d);
            t2 = a / gcd(c, a) * c;
            if (t2 % t == 0)
                printf("%lld
    ", t2 / t);
            else
            {
                ll p = gcd(t2, t);
                t /= p;
                t2 /= p;
                printf("%lld/%lld
    ", t2, t);
            }
        }
        
        return 0;
    }
  • 相关阅读:
    Leetcode 127 **
    Leetcode 145
    Leetcode 144
    Leetcode 137
    Leetcode 136
    重写nyoj2——括号匹配
    堆排序
    Leetcode 150
    【转】个人最常用的Eclipse快捷键
    Ajax编程中,经常要能动态的改变界面元素的样式
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7738330.html
Copyright © 2011-2022 走看看