Submission #1248445

#TimeUsernameProblemLanguageResultExecution timeMemory
1248445dophuPatkice II (COCI21_patkice2)C++20
110 / 110
371 ms147196 KiB
#include <bits/stdc++.h>
#define ll long long
#define pll pair<ll,ll>
#define fi first
#define se second
using namespace std;
const ll mod=1e9+7;
const ll inf=1e17;
const ll N=2e3+3;
const ll dx[4]={-1,0,1,0};  /// ^ > v <
const ll dy[4]={0,1,0,-1};
const char dc[4]={'^','>','v','<'};
struct dd {
    ll i,j;
    char cc;
};
dd trace[N][N];
ll n,m,cnt=0;
char a[N][N],c[N][N];
bool vis[N][N];
ll si=0,sj=0,ei=0,ej=0;
ll change[N][N];
bool dk(ll i,ll j,ll n,ll m) {
    return (i>=1 && i<=n && j >=1 && j<=m);
}
void bfs(ll sii,ll sjj,ll eii,ll ejj) {
    for (ll i=1;i<=n;i++) {
        for (ll j=1;j<=m;j++) change[i][j]=inf;
    }
    change[sii][sjj]=0;
    deque <pll> q;
    q.push_front({sii,sjj});
    while (!q.empty()) {
        pll fr=q.front();
        q.pop_front();
        ll ff=fr.fi,ss=fr.se;
        if (vis[ff][ss]) continue;
        vis[ff][ss]=true;
        for (ll i=0;i<4;i++) {
            ll tmp=0;
            ll fff=ff+dx[i];
            ll sss=ss+dy[i];
            if (dk(fff,sss,n,m)) {
             ///   cout<<fff<<' '<<sss<<endl;
                ll tmp=0;
                if (a[ff][ss] != dc[i]) tmp=1;
                if (a[fff][sss]=='o') tmp=0;
                if (change[fff][sss] > change[ff][ss]+tmp) {
                    change[fff][sss]=change[ff][ss]+tmp;
                    trace[fff][sss]={ff,ss,dc[i]};
                    if (!tmp) q.push_front({fff,sss});
                    else q.push_back({fff,sss});
                }
            }
        }
    }
    return ;
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    if (fopen("p1.inp","r")) {
        freopen("p1.inp","r",stdin);
        freopen("p1.out","w",stdout);
    }
    cin>>n>>m;
    for (ll i=1;i<=n;i++) {
        for (ll j=1;j<=m;j++) {
            cin>>a[i][j];
            c[i][j]=a[i][j];
            if (a[i][j]=='o') {
                si=i,sj=j;
            }
            if (a[i][j]=='x') {
                ei=i,ej=j;
            }
        }
    }
    ll c1=ei,c2=ej;
 //   cout<<si<<' '<<sj<<' '<<ei<<' '<<ej<<endl;
   /** for (ll i=1;i<=n;i++) {
        for (ll j=1;j<=m;j++) {
            cout<<a[i][j];
        }
        cout<<endl;
    } */
    bfs(si,sj,ei,ej);
   // cout<<1<<endl;
   // ll ff=ei,ss=ej;
 ///  cout<<ei<<' '<<ej<<endl;
    while (trace[ei][ej].i != si || trace[ei][ej].j != sj) {
        ll ff=ei,ss=ej;
        ei=trace[ff][ss].i;
        ej=trace[ff][ss].j;
        c[ei][ej]=trace[ff][ss].cc;
     //   cout<<1<<endl;
     //   cout<<ei<<' '<<ej<<endl;
    //    ll ff=ei,ss=ej;
    }
    for (ll i=1;i<=n;i++) {
        for (ll j=1;j<=m;j++) {
            if (a[i][j] != c[i][j]) {
              ///  cout<<1<<endl;
                cnt++;
            }
        }
    }
 //   cout<<c1<<' '<<c2<<endl;
    cout<<cnt<<endl;
  ///  cout<<change[c1][c2]<<endl;
  //  cout<<n<<' '<<m<<endl;
    for (ll i=1;i<=n;i++) {
        for (ll j=1;j<=m;j++) {
            cout<<c[i][j];
        }
        cout<<endl;
    }
  ///  cout<<111111<<endl;
    return 0;
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:65:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |         freopen("p1.inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
Main.cpp:66:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |         freopen("p1.out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...