平平无奇的一篇题解

· · 题解

思路

将骷髅的横坐标、纵坐标的比化简成最简形式,再用容器去重,再输出容器内的数量。

看到这里,如果你是因为没有思路点进来的,建议按照上面的思路试着写一写哦

代码

#include<bits/stdc++.h>//万能头YYDS 
using namespace std;
map<pair<int,int>/*我试着用结构体 但是不行*/,bool>mp;
int n,m,sx,sy;
char c;
queue<pair<int,int> >kulou;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>c;
            if(c=='K') kulou.push(make_pair(i,j));//把每个骷髅的位置存起来 
            if(c=='S') sx=i,sy=j;//记录神箭游侠的位置 
        }
    }

    while(!kulou.empty()){
        int tx=kulou.front().first,ty=kulou.front().second;
        kulou.pop();
        tx-=sx;
        ty-=sy;
        int g=abs(__gcd(tx,ty));
        tx/=g;//化简比 
        ty/=g;//化简比 
        mp[make_pair(tx,ty)]=true;//类似桶的思想 
    }
    cout<<mp.size();//输出长度 
    return 0;
}

最后

这是我的第一篇题解,希望管理大大通过,管理员辛苦了