60分求助
查看原帖
60分求助
748239
OIbishop楼主2023/10/19 14:03
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;
const int N = 2000 * 2000 + 5;
char a[2005][2005];
vector <int> e[N];
int n , m , in[N];
gp_hash_table < int , pair <int , int> > id;
int getid (int x , int y)
{
    return (x - 1) * m + y;
}
int st[N] , top;
signed main ()
{
    // freopen ("cars.in" , "r" , stdin);
    // freopen ("cars.out" , "w" , stdout);
    ios::sync_with_stdio (false);
    cin.tie (0); cout.tie (0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> a[i][j];
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (a[i][j] == '.') continue;
            id[getid (i , j)] = make_pair (i , j);
            if (a[i][j] == 'E')
            {
                for (int k = j + 1; k <= m; k++)
                    if (a[i][k] != '.') e[getid (i , k)].push_back (getid (i , j)) , in[getid (i , j)]++;
            }
            else if (a[i][j] == 'W')
            {
                for (int k = j - 1; k >= 1; k--)
                    if (a[i][k] != '.') e[getid (i , k)].push_back (getid (i , j)) , in[getid (i , j)]++;
            }
            else if (a[i][j] == 'N')
            {
                for (int k = i - 1; k >= 1; k--)
                    if (a[k][j] != '.') e[getid (k , j)].push_back (getid (i , j)) , in[getid (i , j)]++;
            }
            else if (a[i][j] == 'S')
            {
                for (int k = i + 1; k <= n; k++)
                    if (a[k][j] != '.') e[getid (k , j)].push_back (getid (i , j)) , in[getid (i , j)]++;
            }
        }
    }
    for (int i = 1; i <= n * m; i++)
    {
        // cout << in[i] << "\n";
        if (id[i].first && in[i] == 0) st[++top] = i;
    }
    while (top)
    {
        int u = st[top]; top--;
        cout << "(" << id[u].first - 1 << "," << id[u].second - 1 << ")" << "\n";
        for (int i = 0; i < e[u].size (); i++)
        {
            int v = e[u][i];
            if ((--in[v]) == 0) st[++top] = v;
        }
    }
    return 0;
}

莫名MLE ,就很离谱

2023/10/19 14:03
加载中...