比例简化TLE

问题描述

在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。

例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。

不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。

因为这个比例的数值太大,难以一眼看出它们的关系。

对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。

现给出支持人数 A,反对人数 B,以及一个上限 L,请你将 A:B 化简为 ‘A’:B’,要求在 A’ 和 B’ 均不大于 L 且 A’ 和 B’ 互质(两个整数的最大公约数是1)的前提下,A’/B’≥A/B 且 A’/B’−A/B 的值尽可能小。

输入格式

输入共一行,包含三个整数 A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。

输出格式

输出共一行,包含两个整数 A’,B’,中间用一个空格隔开,表示化简后的比例。

数据范围

1≤A,B≤106,

1≤L≤100,A/B≤L

输入样例:

1498 902 10

输出样例:

5 3

时/空限制:1s / 64MB

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a,b,c,aa[1005],bb[1005],ans=0;
  cin>>a>>b>>c; 
  if(a%100>=50){ 
  	a=a+(100-a%100);//"五入"
  }else {
  	a=a-a%100;
  }
  if(b%100>=50){
  	b=b+(100-b%100);//"四舍" 
  }else {
  	b=b-b%100;
  }
   for(int i=2;i<=a/2;i++)
   {
   	if(a%i==0)
	   {
	   	i=aa[i];//找出a的所有因数 
	   }
   	else break;
   }
   for(int j=2;j<=b/2;j++)
   	{
   		
   		if(b%j==0)
	   {
	   	j=bb[j];//找出b的所有因数 
	   }
   	else break;
   		if( b%j==0 and b/a!=0)cout<<a<<" "<<b;//判断互质 
   		else continue;
	   }
	   for(int i=a/2;i>=1;i--)
	   {
	   	for(int j=b/2;j>=1;j--)
	   	{
	   		if(aa[i]==bb[i])
	   		{
	   			aa[i]=ans;//找出a和b的最大公因数 
	   			break;
			   }
		   }
	   }
	   a=a/ans;
	   b=b/ans;
	   cout<<a<<" "<<b;
   
}

四万亿

1 个赞

啥意思

啥玩意

1 个赞

到底哪错了

我是蒟蒻

看不懂

才怪

。。。。你

???

路过+114514

纯路过+10086

路过+123456

路过+123456

???