AcWing 1250. juego de rejilla

enlaces a los temas: Haga clic aquí para
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
pensar: Incluso una fusión de las dos partes en el set, si se encuentra en ambos extremos del conjunto de puntos que han estado en la misma colección, lo que indica que se ha producido anillo.

Consejo: el uso X * norte + y x*n+y puede ser coordenadas bidimensionales ( X , y ) (x,y) en coordenadas unidimensionales, siempre que X , y x,y a partir 0 0 comenzar.

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>

using namespace std;
const int N = 40010;

int f[N];
int n, m;

int get(int x, int y)
{
    return x * n + y;
}

int find(int x)
{
    if(x != f[x])   f[x] = find(f[x]);
    return f[x];
}

int main()
{
    cin >> n >> m;
    
    for(int i = 0; i < n * n; ++i)  f[i] = i;
    
    int res = 0;
    for(int i = 1; i <= m; ++i)
    {
        int x, y;
        char c;
        cin >> x >> y >> c;
        
        if(res) continue;
        
        x--, y--;                    // 下标从0开始
        
        int a, b;
        a = get(x, y);
        if(c == 'D')    b = get(x + 1, y);
        else    b = get(x, y + 1);
        
        int fa = find(a), fb = find(b);
        
        if(fa == fb)    res = i;
        else    f[fa] = fb;
    }
    
    if(res) cout << res << endl;
    else    cout << "draw" << endl;
    return 0;
}
Publicados 844 artículos originales · ganado elogios 135 · Vistas de 150.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_42815188/article/details/105146768
Recomendado
Clasificación