蓝桥 2018年省赛 螺旋折线

目测一个找规律题目,不知道写得对不对。。。
规律还是蛮好找的:第一象限(包括x轴正半轴,y轴正半轴),以x,y相等的坐标为基点,然后再根据所求点与基点的关系求得dis。
第二,四象限亦是如此。稍微特殊的第三象限,也能较快地看出规律。在注释中已经注明

#include <bits/stdc++.h>	//蓝桥 2018省赛 螺旋折线:long long范围在9.22e18,在计算过程中不会超出long long范围 
using namespace std;
int main()
{
	long long int x,y;
	scanf("%lld %lld",&x,&y);
	long long step;
	long long int temp;
	long long int x1,y1;
	if(x>=0 && y>=0)	//第一象限,y轴正半轴,x轴正半轴 
	{
		temp=max(x,y);	//取x,y的最大值 
		temp*=2;	//最大值乘2平方后得到基点的dis 
		step=temp*temp;	//第一象限x==y时dis 
		if(x!=y)	//如果x!=y 
		{
			if(x<y)	//如果x<y,根据图像的规律可得到dis 
				step-=(y-x);	
			else
				step+=(x-y);
		}
	}
	if(x>=0 && y<0)	//第四象限,y轴负半轴(由第一象限基点推得dis)
	{
		x1=x,y1=-y;
		temp=max(x1,y1);
		temp*=2;
		step=temp*temp+temp;	//先得到第四象限基点dis 
		if(x1!=y1)	//与第一象限相同,对不是基点的点dis进行处理 
		{
			if(x1>y1)
				step-=(x1-y1);
			else
				step+=(y1-x1);
		}	
	}
	if(x<=0 && y>0)	//第二象限,x轴负半轴 
	{
		x1=-x,y1=y;
		temp=max(x1,y1);
		temp*=2;
		step=temp*temp-temp;//在第一象限的基点dis上-=temp 
		if(x1!=y1)
		{	
			if(x1<y1)
				step+=(y1-x1);
			else
				step-=(x1-y1);
		}
	} 
	if(x<0 && y<0)	//第三象限 
	{
		x1=-x,y1=-y;
		temp=max(x1,y1);
		temp=temp*2-1; 
		step=temp*temp;	//找规律可得到step=(temp+temp-1)^2,实际上就是(x1+y1)^2 
		if(x1!=y1+1)	//同理根据第三象限的基点进行处理 
		{	
			if(x1<(y1+1))
				step-=(y1+1-x1);
			else
				step+=(x1-y1-1);
		}
	} 
	printf("%d",step);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值