杭电2058
来源:互联网 发布:数据库join用法 编辑:程序博客网 时间:2024/04/28 20:36
刚开始想着通过a算出b再判断是否满足,但是这样要做n,m中那个小的数次循环,当n和m均很大的时候就会超时,如下:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
__int64 n,m,l,i,b;
double a;
while((cin>>n>>m)&&(n!=0&&m!=0))
{
if(n>m)
l=m;
else
l=n;
for(i=1;i<=l;i++)
{
a=sqrt((i-0.5)*(i-0.5)+2*m)-0.5;
b=a;
if(a==b&&a<=n)
cout<<'['<<i<<','<<b<<']'<<endl;
}
cout<<endl;
}
}
刚开始纠结怎么样让那个循环更小,但是如果那样判断就无法精简,所以就换判断方法:(看别人的代码好久才明白)
因为(b-a+1)<sqrt(2*m);所以设置条件i<sqrt(2*m);从sqrt(2*m)处开始检索,令b-a+1=i,算出2*b=2*m/i+i-1,a=2*m/i-b;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double n,m;
int a,b,c;
while((cin>>n>>m)&&(n!=0&&m!=0))
{
int i=sqrt(2*m);
c=m;
for(;i>=1;i--)
{
if((2*c)%i==0)判断a+b是否为整数
{
if((2*c/i+i-1)%2==0)//判断b是否为整数
{
b=(2*m/i+i-1)/2;
a=2*m/i-b;
cout<<'['<<a<<','<<b<<']'<<endl;
}
}
}
cout<<endl;
}
}
- 杭电2058
- 杭电2058
- 杭电2058
- 杭电2058 超时
- 杭电2058
- 杭电2058
- 杭电
- 杭电
- 杭电
- 杭电ACM 2058 The sum problem
- 杭电2058-The sum problem
- 杭电 2058 The sum problem
- 杭电---2058 The sum problem
- 杭电2058 The sum problem
- 杭电2058 The sum problem
- 杭电 2058 the sum problem
- 杭电 1234 和 杭电 2115
- 杭电2056之Rectangles 杭电
- Java图形编程入门(连载1)
- AFNetworking简单使用起来进行下载图片
- zoj_1203 Swordfish
- [开源]Android手机控制电脑---项目背景介绍
- OpenCV学习笔记(六)——对XML和YAML文件实现I/O操作
- 杭电2058
- JAVA图形编程入门(连载2)
- ognl 怎么调用 静态方法
- URAL 1699 Turning Turtles 解题报告
- measure,layout,draw的相关方法
- 浅谈JSP的Forward及sendRedirect方法
- Linux系统安装时分区的选择
- php实战第五天
- 处理鼠标离开窗口的消息 (WM_MOUSELEAVE)