51nod 1080 两个数的平方和【二分+预处理】
来源:互联网 发布:php默认编码方式 编辑:程序博客网 时间:2024/06/01 15:24
1080 两个数的平方和
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法
给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出。
例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种)
Input
一个数N(1 <= N <= 10^9)
Output
共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。如果无法分解为2个数的平方和,则输出No Solution
Input示例
130
Output示例
3 117 9
思路:
我们预处理出100000内所有的平方数,那么接下来我们枚举一个i,然后二分查找合法的位子j即可。
时间复杂度O(nlongn),这里n=100000
Ac代码:
#include<stdio.h>#include<string.h>using namespace std;#define ll __int64ll ans[100006];void init(){ for(int i=0;i<=100000;i++) { ans[i]=(ll)i*(ll)i; }}int main(){ ll n; init(); while(~scanf("%I64d",&n)) { int flag=0; for(int i=0;i<=100000;i++) { int l=i,r=100000; while(r-l>=0) { int mid=(l+r)/2; if(ans[mid]+ans[i]>n) { r=mid-1; } else if(ans[mid]+ans[i]<n) { l=mid+1; } else { flag=1; printf("%d %d\n",i,mid);break; } } } if(flag==0) { printf("No Solution\n"); } }}
0 0
- 51nod 1080 两个数的平方和【二分+预处理】
- 51nod 1080 两个数的平方和【二分】
- 51nod 1080:两个数的平方和
- 51NOD 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod-1080 两个数的平方和
- 51nod-【1080 两个数的平方和】
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 【51Nod】1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- AndroidStudio 百度地图Demo key验证错误解决方案
- usb的包结构和传输类型
- Android活动启动模式简介
- 王朝 第十六周 字符链接
- vim 设置行号及其背景颜色
- 51nod 1080 两个数的平方和【二分+预处理】
- Android 根据图片高度动态设置ViewPager高度
- JZOJ2722. 二进制矩阵
- python 身份证号码验证和随机产生
- 图片控件SImageView
- spring源码深度解析(笔记二)--默认标签的解析
- HTML5--拖放
- C++把txt文件读到二维数组
- 向对话框传递数据DialogBoxParam;获取对话框返回的数据DialogBox;EndDialog;强制转换;