列表

详情


NC200572. 显示器

描述

LCD显示器为r行c列的一个像素矩阵。现在要显示分辨率的c:r比例为a:b,请问能使用的最大分辨率(即像素点最多的分辨率)为多少?

输入描述

第一行是一个整数,表示样例的个数。

每个样例的第一行为3个整数,,表示显示器的像素为r行c列,有m种显示比例。
以后的m行,每行两个整数,保证a与b互质。

输出描述

对于每个样例的显示比例,输出最大的显示分辨率,第一个为列,第二个为行,中间一个空格隔开。如果不可能,输出两个0。
每个样例之间用一个空行隔开。

示例1

输入:

2
1600 900 3
16 9
8 5
4 3
1024 768 3
16 9
8 5
4 3

输出:

1600 900
1440 900
1200 900

1024 576
1024 640
1024 768

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 7ms, 内存消耗: 488K, 提交时间: 2019-12-28 19:31:38

# include <stdio.h>
int main(){
	int t,c,a,b,d,e,n,r;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&c,&r,&n);
		while(n--){
			scanf("%d%d",&a,&b);
			d=c/a;
			e=r/b;
			if(d>=e)printf("%d %d\n",a*e,b*e);
			else printf("%d %d\n",a*d,b*d);
		}
	if(t!=0)printf("\n");
	}
}

C++14(g++5.4) 解法, 执行用时: 38ms, 内存消耗: 608K, 提交时间: 2019-12-28 19:38:42

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t,c,r,n,m,a,b,j;
	cin>>t;
	while(t--){
		cin>>c>>r>>m;
		for(int i=0;i<m;i++){
			cin>>a>>b;
			for(j=1;a*j<=c&&b*j<=r;j++);				
			cout<<a*(j-1)<<" "<<b*(j-1)<<endl;
		}
		if(t)cout<<endl;
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 24ms, 内存消耗: 548K, 提交时间: 2020-07-31 16:36:24

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int t,r,c,n,a,b;
	cin>>t;
	while(t--){
		cin>>c>>r>>n;
		while(n--){
			cin>>a>>b;
			int ans=min(c/a,r/b);
            cout<<a*ans<<' '<<b*ans<<endl;
		}
        cout<<endl;
	}
}

Python3(3.5.2) 解法, 执行用时: 154ms, 内存消耗: 3448K, 提交时间: 2019-12-28 19:19:56

T=int(input())
for t in range(T):
    r,w,n=list(map(int,input().split()))
    for  i in range(n):
        a,b=list(map(int,input().split()))
        x=min(r//a,w//b)
        print(a*x,b*x)
    if (t<T-1):print()

上一题