SCP-J T1,#4-5和9-10 TLE,#6-7 RE,40分求助
  • 板块学术版
  • 楼主Karl_Wan
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/10/13 12:41
  • 上次更新2024/10/13 14:41:30
查看原帖
SCP-J T1,#4-5和9-10 TLE,#6-7 RE,40分求助
1073879
Karl_Wan楼主2024/10/13 12:41

SCP-J T1 题目传送门

评测状态:1-3 AC,4-5 TLE,6-7 RE,8 AC,9-10 TLE(R181736363

思路:若 n÷x=krn \div x = k \cdots \cdots r(其中 xx 为除数),那么直接用 n÷kn \div k 可以反推出除数 xx(忽略余数部分)。然后再把除数 xx 向下枚举,如果 n÷xn \div x 还是等于 kk,那么 ansans+1ans \gets ans+1 并且 xx1x \gets x-1;否则就跳出循环。

代码:

#include <iostream>
using namespace std;
long long n,beichushu,shang;
int main()
{
	cin>>n;
	while(n--)
	{
		cin>>beichushu>>shang;
		if(shang==0)//特判,如果商等于0,那么除数一定大于被除数了,这样情况下余数只有一种可能,那就是等于被除数,所以是1
		{
			cout<<1<<'\n';
			continue;
		}
		long long u=beichushu/shang;
		long long i=u;
		long long ans=0;
		while(1)
		{
			if(beichushu/i!=shang) break;
			//cout<<i<<endl;
			ans++;i--;
		}
		cout<<ans<<'\n';
	}
	
	return 0;
}

请讲讲我的算法有什么错误,或者程序实现细节有哪一点不对,然后再给出代码。谢谢!

感谢各位dalao的帮助!

2024/10/13 12:41
加载中...