转跳到内容

每 期 算 法 挑 战 #0


只显示该作者

只有该作者的内容显示中。 返回到主题

推荐贴

sstm居然还有算法板块,惊了:NEKOMIMI_PARADISE_11:

题目来自蓝桥杯第九届省赛-螺旋折线

描述

19_95e6f22816-p1.png.af58fa7250d1c276ef44ba703316a8f8.png

对于整点 (x,y),我们定义它到原点的距离dis(x,y) 是从原点到 (x,y) 的螺旋折线段的长度。

例如 dis(0,1)=3,dis(−2,−1)=9

那么你能计算出dis(13,-15)吗?

注释
Eternalcycle Eternalcycle 70.00节操
链接到点评
33 分钟前, moyuqianqiong 说道:

将左下轴偏转90度构成n个正方形5248570a43b625f2.png

构成等差数列8 16 24 32 ....则点dis(13,-15)为数列前14项和加上第15项-2为14*8+14*{14-1}*8/2+8+{8-1}*8-2=840+62=932

当时模拟赛就用的这个方法,大佬强:NEKOMIMI_PARADISE_27:

链接到点评

sstm真的是卧虎藏龙啊,题目不是很难,但是细节验算还是稍微有点麻烦

204124734_73909_b532a10675-QQ20210222201543.thumb.jpg.6ebec2601d368591db0d8085bbfdbc7d.jpg

个人做法和某个答案一样,一圈一个区域划分,用x y的最大值判断在哪个圈,最后分四个方向分别判断,附上本人的垃圾代码(

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt(),y = sc.nextInt();
        long n = Math.max(Math.abs(x),Math.abs(y));
        long res = 4 * (n - 1) * n;
        if(x == -n) {
            if(y == -n) {
                res += (8 * n);
            } else {
                res += (n + y);
            }
        } else if(y == n) {
            res += (2 * n) + (n + x);
        } else if(x == n) {
            res += (4 * n) + (n - y);
        } else if(y == -n) {
            res += (6 * n) + (n - x);
        }
        System.out.println(res);
    }
}

答案就是932

 

链接到点评
1 小时前, yhz012 说道:

注意到:

(0, 0) => 0
(-1, 0) => 1
(0, 1) => 1 + 2
(1, 0) => 1 + 2 + 2
(0, -1) => 1 + 2 + 2 + 2
(-2, 0) => 1 + 4 * 2 + 1

因此,坐标轴上的点有

(-n, 0) => 1 + sum( 4 * 2 * i + 1), i = 1, 2 ..., n - 1
(0, n) => d(-n, 0) + 2 * n
(n, 0) => d(-n, 0) + 2 * 2 * n
(0, -n) => d(-n, 0) + 3 * 2 * n

对于第四象限点(13, -15),因为在y=-x直线下方,所以

d(13, -15) = d(15, -15) + 2
           = d(15, 0) + 15 + 2
           = d(-15, 0) + 2 * 2 * 15 + 15 + 2
           = 1 + sum(4 * 2 * i + 1) + 77
           = 855 + 77 = 932

:mx040:没验算,随便写的,写错了别打我(x

 

 

 

想了下,把两步看成一起作为一个L型会容易点

对的,思路很清晰:NEKOMIMI_PARADISE_1:

链接到点评
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款