240322026-02-03 18:08:23algoproÚtépítéscpp17Hibás válasz 0/100898ms4012 KiB
// UUID: 50954be3-333c-41e2-9dcf-96413afb25d9
#include <bits/stdc++.h>
using namespace std;
#define int long long

vector<vector<pair<int,int>>>adj;
vector<bool>elek;
vector<pair<int,char>>elek2;
vector<bool>foglalt;
vector<bool>volte;

template<typename t1, typename t2>
std::ostream& operator<<(std::ostream& os, std::pair<t1,t2>p ){
    
    os << p.first << ' ' << p.second << "; ";
    return os;
}

template<class t>
std::ostream& operator<<(std::ostream& os, std::vector<t>v){
    for(t a : v){
        os << a<< " ";
    }
    os << "\n";
    return os;
}

bool dfs(int cs, bool prev = 1){
    if(!foglalt[cs] && !prev){
        foglalt[cs] = 1;
        return 1;
    }
    volte[cs] = 1;
    for(auto [i,el] : adj[cs]){
        if((elek[el] xor prev) && !volte[i]){
            if(dfs(i,!prev)){
                elek[el] = !elek[el];
                //cout << cs << " ";
                return 1;
            }
        }
    }
    return 0;
}



signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,m;
    cin >> n >> m;
    adj.assign((n+1)*(m+1),vector<pair<int,int>>());
    foglalt.assign((n+1)*(m+1),0);
    volte.assign((n+1)*(m+1),0);

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            char c;
            cin >> c;
            if(c == '/'){
                m++;
               
                adj[i*m+j+1].push_back({i*m+j+m, elek2.size()});
                adj[i*m+j+m].push_back({i*m+j+1, elek2.size()});
                m--;
                elek2.push_back({i*m+j, c});
            }else if(c == '\\'){
                m++;
                adj[i*m+j].push_back({i*m+j+m+1, elek2.size()});
                adj[i*m+j+m+1].push_back({i*m+j, elek2.size()});
                m--;
                elek2.push_back({i*m+j, c});
            }
        }
    }
    elek.assign(elek2.size(),0);

    
    int ans = 0;
    for(int i = 0; i <= n ; i++){
        for(int j= 0; j <= m; j+=1){
            volte.assign((n+1)*(m+1),0);
            int r = i*(m+1)+j;
            if(dfs(r)){
                ans++;
                foglalt[r] = 1;
            }
        }
    }
    cout << ans << endl;
    vector<string>b(n,string(m, '.'));
    for(int i = 0; i < elek.size(); i++ ){
        if(elek[i]){
            b[elek2[i].first/m][elek2[i].first%m] = elek2[i].second;
        }
    }
    for(auto s : b){
        cout << s << '\n';
    }
}
/*
1 2 1
1 2
*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/100
1Hibás válasz0/01ms512 KiB
2Hibás válasz0/014ms2984 KiB
3Hibás válasz0/51ms508 KiB
4Hibás válasz0/51ms316 KiB
5Hibás válasz0/51ms316 KiB
6Hibás válasz0/51ms560 KiB
7Hibás válasz0/51ms316 KiB
8Hibás válasz0/51ms316 KiB
9Hibás válasz0/51ms332 KiB
10Hibás válasz0/51ms316 KiB
11Hibás válasz0/52ms572 KiB
12Hibás válasz0/52ms572 KiB
13Hibás válasz0/52ms564 KiB
14Hibás válasz0/52ms756 KiB
15Hibás válasz0/54ms1332 KiB
16Hibás válasz0/59ms2732 KiB
17Hibás válasz0/550ms2732 KiB
18Időlimit túllépés0/5898ms3620 KiB
19Hibás válasz0/568ms2988 KiB
20Hibás válasz0/518ms4012 KiB
21Hibás válasz0/518ms4012 KiB
22Hibás válasz0/528ms2736 KiB