弧光 发布于八月 7, 2021 分享 发布于八月 7, 2021 sstm居然还有算法板块,惊了( 题目来自蓝桥杯第九届省赛-螺旋折线 描述 对于整点 (x,y),我们定义它到原点的距离dis(x,y) 是从原点到 (x,y) 的螺旋折线段的长度。 例如 dis(0,1)=3,dis(−2,−1)=9 那么你能计算出dis(13,-15)吗? 注释 Eternalcycle 70.00节操 糖 链接到点评
弧光 发布于八月 7, 2021 作者 分享 发布于八月 7, 2021 33 分钟前, moyuqianqiong 说道: 将左下轴偏转90度构成n个正方形 构成等差数列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 当时模拟赛就用的这个方法,大佬强 链接到点评
弧光 发布于八月 7, 2021 作者 分享 发布于八月 7, 2021 sstm真的是卧虎藏龙啊,题目不是很难,但是细节验算还是稍微有点麻烦 个人做法和某个答案一样,一圈一个区域划分,用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 链接到点评
弧光 发布于八月 7, 2021 作者 分享 发布于八月 7, 2021 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 没验算,随便写的,写错了别打我(x 想了下,把两步看成一起作为一个L型会容易点 对的,思路很清晰 链接到点评
推荐贴