题解 | #Number Steps#

Number Steps

https://www.nowcoder.com/practice/e3d8d4dd9ec740f9b1e7fc1e8574ba21

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <set>
#include <map>
#include <unordered_map>
#include <deque>
#include <tuple>
#include <bitset>
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0)
#define endl '\n'
#define MAXINT 1e9+7
#define ll long long
#define pb push_back
#define mpr make_pair
#define FOR(i,m,n) for(int i = m;i < n;i++)
#define FORR(i,m,n) for(int i = m;i >= n;i--)
#define FOR_epr(i,m,epr) for(int i = m;epr;i++)
#define FORR_epr(i,m,epr) for(int i = m;epr;i--)
using namespace std;

int dir[4][2] = {{1,1},{1,-1},{1,1},{-1,1}};
int dirPoint =-1;
map<pair<int,int>,int> mp;

void preprocess(){
    int cnt = 0;
    for(int i = 0,j = 0;i < 5010 && j < 5010;){
        mp[mpr(i,j)] = cnt++;
        i += dir[(++dirPoint)%4][0];
        j += dir[(dirPoint)%4][1];
    }
}

void solve() {
    preprocess();
    int x,y;
    while(cin>>x>>y){
        //cin>>x>>y;
        if(mp.count(mpr(x,y))) cout<<mp[mpr(x,y)]<<endl;
        else cout<<"No Number"<<endl;
    }
}

int main() {
    ios;
    int T = 1;
    //cin >> T;
    while (T--) solve();
    return 0;
}

找不出规律的直接模拟也可以,预处理出题目所给范围内的所有有数字的坐标,用map维护,之后每遇到一对坐标直接查询即可。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务