zoukankan      html  css  js  c++  java
  • 【Gym

    BUPT 2017 summer training (for 16) #1C

    题意

    A new computer scientist is trying to develop a new memory management system called "spiral memory management".

    The basic idea of this system is that it represents the memory as a 2D grid with a predefined origin point, and the address of each memory location is represented as its (x,y) coordinates, and it tries to store frequently used data as close to the origin point as possible.

    This system needs a search algorithm. Our computer scientist is currently developing an algorithm called "square spiral search".

    The algorithm searches the memory locations in the following order (also shown in the figure):

    (0,0), (1,0), (1,1), (0,1), (-1,1), (-1,0), (-1,-1), (0,-1), (1,-1), (2,-1), (2,0), (2,1), (2,2), (1,2), (0,2), (-1,2), (-2,2), (-2,1), (-2,0), (-2,-1), (-2,-2,) ,(-1,-2) ... and so on.


    Now he is wondering: how many steps would it take to reach a memory location with the address (x, y) using the square spiral search. Can you help him find the answer?

    题解

    代码

    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #define ll long long
    using namespace std;
    int main(){
    	int t;
    	scanf("%d",&t);
    	while(t--){
    		int x,y;
    		scanf("%d%d",&x,&y);
    		if(!x&&!y){
    			puts("0");continue;		
    		}
    		ll s=max(abs(x),abs(y)),ans=(s*2+1)*(s*2+1)-1;
    		if(y==-s)
    			ans-=(s-x);
    		else if(x==-s)
    			ans-=s*2+(s+y);
    		else if(y==s)
    			ans-=s*4+(s+x);
    		else
    			ans-=s*6+(s-y);
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    HBase 文件读写过程描述
    Kafka 部署指南-好久没有更新博客了
    《Python高性能编程》——列表、元组、集合、字典特性及创建过程
    Ansible常用功能
    vim内替换文件内容
    线程队列-queue
    Python多进程
    python多线程知识-实用实例
    夜间模式的实现
    本地通知的实现
  • 原文地址:https://www.cnblogs.com/flipped/p/7202341.html
Copyright © 2011-2022 走看看