蓝桥杯第九届省赛:第七题 螺旋折线
2018-04-04 11:05
253 查看
标题:螺旋折线
如图p1.png所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。
例如dis(0, 1)=3, dis(-2, -1)=9
给出整点坐标(X, Y),你能计算出dis(X, Y)吗?
【输入格式】
X和Y
对于40%的数据,-1000 <= X, Y <= 1000
对于70%的数据,-100000 <= X, Y <= 100000
对于100%的数据, -1000000000 <= X, Y <= 1000000000
【输出格式】
输出dis(X, Y)
【样例输入】
0 1
【样例输出】
3
![](https://img-blog.csdn.net/20180404110426847)
思路:先找规律:上图就是我找的规律。 分四个象限 分情况算 #include<cstdio>
#include<cmath>
using namespace std;
int main(){
long long int x, y, cnt = 0;
scanf("%lld %lld",&x, &y);
int max = abs(x) > abs(y) ? abs(x) : abs(y);
for(int i = 1; i <= max; i++){
cnt += 8 * i -1;
}
if(x <= 0 && y >= 0){
if(abs(x) >= y) cnt = cnt - 6 * max + y; //第二象限竖着的线
else cnt = cnt - 4 * max - abs(x); //横着的线
}else if(x > 0 && y > 0){
if(x >= y) cnt = cnt - 2 * max - y;
else cnt = cnt - 4 * max + x;
}else if(x >= 0 && y <= 0){
if(abs(y) <= x) cnt = cnt - 2 * max + abs(y);
else cnt = cnt - abs(x);
}else if(x < 0 && y < 0){
x = abs(x);y = abs(y);
if(x >= y + 1) cnt = cnt - 6 * max - y;
else cnt += x;
}
printf("%d", cnt);
return 0;
}
如图p1.png所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。
例如dis(0, 1)=3, dis(-2, -1)=9
给出整点坐标(X, Y),你能计算出dis(X, Y)吗?
【输入格式】
X和Y
对于40%的数据,-1000 <= X, Y <= 1000
对于70%的数据,-100000 <= X, Y <= 100000
对于100%的数据, -1000000000 <= X, Y <= 1000000000
【输出格式】
输出dis(X, Y)
【样例输入】
0 1
【样例输出】
3
思路:先找规律:上图就是我找的规律。 分四个象限 分情况算 #include<cstdio>
#include<cmath>
using namespace std;
int main(){
long long int x, y, cnt = 0;
scanf("%lld %lld",&x, &y);
int max = abs(x) > abs(y) ? abs(x) : abs(y);
for(int i = 1; i <= max; i++){
cnt += 8 * i -1;
}
if(x <= 0 && y >= 0){
if(abs(x) >= y) cnt = cnt - 6 * max + y; //第二象限竖着的线
else cnt = cnt - 4 * max - abs(x); //横着的线
}else if(x > 0 && y > 0){
if(x >= y) cnt = cnt - 2 * max - y;
else cnt = cnt - 4 * max + x;
}else if(x >= 0 && y <= 0){
if(abs(y) <= x) cnt = cnt - 2 * max + abs(y);
else cnt = cnt - abs(x);
}else if(x < 0 && y < 0){
x = abs(x);y = abs(y);
if(x >= y + 1) cnt = cnt - 6 * max - y;
else cnt += x;
}
printf("%d", cnt);
return 0;
}
相关文章推荐
- 蓝桥杯第九届省赛JAVA真题----螺旋折线
- 2018 蓝桥杯 省赛 B组 原题 C语言B组 第7题 第九届蓝桥杯真题 螺旋折线
- 第九届蓝桥杯省赛C++B组 螺旋折线
- 第九届 蓝桥杯 Java B组 螺旋折线
- 第九届蓝桥杯 螺旋折线
- 第九届蓝桥杯 螺旋折线
- 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】——附解题代码
- 2018年第九届蓝桥杯【C++省赛B组】【第三题:乘积尾零】——附解题代码
- 2018省赛第九届蓝桥杯真题C语言B组第八题
- 20180401第九届蓝桥杯省赛B组真题-9全球变暖
- 螺旋折线-蓝桥杯-算法/ C++
- 2018省赛第九届蓝桥杯C/C++ B组 个人代码 递增三元组
- 第九届蓝桥杯省赛B组第四题题解 《测试次数》
- 2018年第九届蓝桥杯【C++省赛B组】【第五题:快速排序】
- 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】
- 2018年第九届蓝桥杯【C++省赛B组】【第三题:乘积尾零】
- 20180401第九届蓝桥杯省赛B组真题-5快速排序
- 2018年第九届蓝桥杯【C++省赛B组】【第四题:测试次数】
- 20180401第九届蓝桥杯省赛B组真题-1第几天
- 2018年第九届蓝桥杯【C++省赛B组】【第五题:快速排序】