acm Time Limit Exceeded

来源:百度知道 编辑:UC知道 时间:2024/07/01 07:36:10
acm Time Limit Exceeded
悬赏分:50 - 离问题结束还有 14 天 3 小时
#include"iostream"
#define N 100
using namespace std;
int main()
{
int i,n[N],k[N],j;
cin>>i;
for(j=0;j<i;j++)
{
int b=0;
cin>>n[j];
while(b*(b+1)/2<n[j])
{
b++;
}
b--;
k[j]=n[j]-b*(b+1)/2;
}
for(j=0;j<i;j++)
{
cout<<k[j]<<endl;
}
return 0;
}
怎么老是Time Limit Exceeded

你补充下题目吧,或许那个题目有更好的算法

while(b*(b+1)/2<n[j])
{
b++;
}
n[j]要等于10000000000000000000000000之类的你还不超时
假如n[j]是int型 让它接近int最大值
那么b*(b+1)超过int上界时
b*(b+1)应该会是负数 上面循环还是出不来
即使是正数也肯定<=int上界<2*n[j]
Time Limit Exceeded 也就很正常了

我要说的是求b值 开个根号能省很多次计算
然后就是注意会越界的情况