50分超时5个点,优化后错2个点,超时5个点,求助!!!
查看原帖
50分超时5个点,优化后错2个点,超时5个点,求助!!!
464543
你账号锁定楼主2021/8/4 19:52
这是50分写法
#include <bits/stdc++.h>
using namespace std;
int ans,b0,b1,a0,a1;
bool gys(int x,int y,int z)
{
	int cnt=0;
	for(int i=1;i<=min(x,y);i++)
	{
		if(x%i==0&&y%i==0)
		{
			cnt=max(cnt,i);
		}
	}
	if(cnt==z)
	{
		return true;
	}
	else
	{
		return false;
	}
}
bool gbs(int x,int y,int z)
{
	for(int i=min(x,y);;i+=min(x,y))
	{
		if(i%x==0&&i%y==0)
		{
			if(i==z)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a0>>a1>>b0>>b1;
		for(int j=a1;j<=b1;j++)
		{
			if(gys(j,a0,a1)&&gbs(j,b0,b1))
			{
				ans++;
			}
		}
		cout<<ans<<endl;
		ans=0;
	}
	return 0;
}

这是30分写法
#include <bits/stdc++.h>
using namespace std;
int ans,b0,b1,a0,a1;
bool ss(int x,int y)
{
	for(int i=2;i<=max(x,y)-1;i++)
	{
		if(x%i==0||y%i==0)
		{
			return false;
		}
	}
	return true;
}
int gys(int x,int y)
{
	if(ss(x,y))
	{
		return 1;
	}
	int cnt=0;
	for(int i=1;i<=min(x,y);i++)
	{
		if(x%i==0&&y%i==0)
		{
			cnt=max(cnt,i);
		}
	}
	return cnt;
}
int  gbs(int x,int y)
{
	for(int i=min(x,y);;i+=min(x,y))
	{
		if(i%x==0&&i%y==0)
		{
			return i;
		}
	}
}
int main(){
	int n,cnt1,cnt2,cnt3;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a0>>a1>>b0>>b1;
		for(int j=a1;j<=b1;j++)
		{
			cnt1=gys(j,a0);
			cnt3=ss(j,b0);
			if(cnt1==a1)
			{
				if(cnt3)
				{
					if(j*b0==b1)
					{
						ans++;
					}
				}
				else
				{
					if(gbs(j,b0)==b1)
					{
						ans++;
					}
				}
			}
		}
		cout<<ans<<endl;
		ans=0;
	}
	return 0;
}

望大佬找出合理的优化方案

2021/8/4 19:52
加载中...