摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
Routine Problem ★☆☆☆☆ 答案正确 100 2015-02-27 12:27:09

题意

给出屏幕分辨率a:b和视频分辨率c:d,求黑边分辨率占全屏的面积。

题解

  • 如果把d拉伸到b,那么新的分辨率满足:
   c0=b*c/d;
   d0=b;
   a0=a;
   b0=b;
  • 全部乘以d
   c0=c*b;
   d0=b*d;
   a0=a*d;
   b0=b*d;
  • 把c0和d0约分即可
  • c拉伸到a也是类似的:
   c0=a;
   d0=a*d/c;
   a0=a;
   b0=b;
  • 乘以c约分即可:
   c0=a*c;
   d0=a*d;
   a0=a*c;
   b0=b*c;

代码

337B.java代码已折叠
展开折叠内容
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<set>
#include<sstream>
#include<utility>
using namespace std;
//数据类型//
#define llu unsigned long long
#define lld long long
//定义默认类型//
typedef lld num;
#define dsi(n) num n;scanf("%lld",&n)
#define si(n) scanf("%lld",&n)
//其它//
#define reset(x) memset(x,0,sizeof(x))
#define ci const num&
#define sqr(x) ((x)*(x))
#define f(i,n) for(num i=1;i<=n;++i)
#define ff(i,r,n) for(num i=r;i<=n;++i)
#define fi(n) f(i,n)
#define f0(i,n) for(num i=0;i!=n;++i)
#define fd(i,n) for(num i=n;i>=1;--i)
#define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
#define rforeach(i,s) for(typeof(s.rbegin()) i=s.rbegin();i!=s.rend();++i)
#define iforeach(i,s) int idx=0;for(typeof(s.begin()) i=s.begin();i!=s.end();++i,++idx)
#define Vector2 pair<num,num>
#define vector2(x,y) make_pair(x,y)
#define x first
#define y second
void printD(num x,num y)
{
    if(x==0){cout<<"0/1"<<endl;return;}
    for(int i=2;i<=x;++i)//fixed:from2避免死循环//
    {
        while(y%i==0&&x%i==0)
            y/=i,x/=i;
    }
    cout<<x<<"/"<<y;
}
int main()
{
    dsi(a);
    dsi(b);
    dsi(c);
    dsi(d);
    if(a*d>b*c)//右边空隙,上下补足//
    {
        printD(a*d-c*b,a*d);
    }
    else
    {
        printD(c*b-a*d,c*b);
    }
    return 0;
}

著作权声明[编辑]

关于[编辑]