339C. Xenia and Weights - Codeforces Solution C++

  Problem Link : 339C. Xenia and Weights 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;
 
set<pair<int,int> > visited;
pair<int,pair<int,int> > depth[4501][4001];
 
bool flag = 0;
 
 
void printVal(int x,int y,bool turn , int j,int m)
{
  if(j>=m)
    return;
  int mx = depth[x][y].second.first;
  int my = depth[x][y].second.second;
  if(!turn)
  {
    cout<<mx-x<<" ";
    printVal(mx,my,1,j+1,m);
  }
  else
  {
    cout<<my-y<<" ";
    printVal(mx,my,0,j+1,m);
  }
 
 
}
 
int dfs(int x, int y, bool turn,string s,int j,int m,int prev)
{
    int diff;
  int dpt=0,mx=-1,my=-1;
  if(flag)
    return 0;
  if(j==m+1)
  {
    flag=1;
    return 0;
  }
  if(!turn)
  {
    diff = y - x;
    int val;
    for(int i = diff; i< 10;i++)
    {
      if(s[i]=='0' || i == prev-1)
        continue;
      if(visited.find(make_pair(x+i+1,y))==visited.end())
      {
        visited.insert(make_pair(x+i+1,y));
        val = dfs(x+i+1,y,1,s,j+1,m,i+1);
        
      }
      else
        val = depth[x+i+1][y].first;
 
      if( val > dpt )
      {
        dpt=val;
        mx = x+i+1;
        my = y;
      }
    }
  }
  else 
  {
    diff = x - y;
    int val;
    for(int i = diff; i< 10;i++)
    {
      if(s[i]=='0' || i==prev-1)
        continue;
      if(visited.find(make_pair(x,y+i+1))==visited.end())
      {
        visited.insert(make_pair(x,y+i+1));
        val = dfs(x,y+i+1,0,s,j+1,m,i+1);
      }
      else
        val = depth[x][y+i+1].first ;
      
      if( val > dpt )
      {
        dpt=val;
        mx = x;
        my = y+i+1;
      }
    }
  }
  depth[x][y].first = dpt+1;
  depth[x][y].second = make_pair(mx, my);
  return dpt+1;
 
 
}
 
int main()
{
  string s;
  cin>>s;
  int m;
  cin>>m;
  memset(depth,0,sizeof(depth));
 
  visited.insert(make_pair(0,0));
  int val=dfs(0,0,0,s,0,m,-1);
  if(val<=m)
    cout<<"NO";
  else
  {
    cout<<"YES\n";
    printVal(0,0,0,0,m);
 
  }
 
 
}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!