Hi Abhishek!

Two things:

{string a = rec(a, abs(x), abs(y));}

This line here is causing a Segmentation Fault. In C++, when we declare 
variables in any way that does not use the default constructor (in this 
case, the copy constructor), the lifetime of a variable does not begin 
until initialization ends. In other words, string a does not exist until 
after this line completes, so when the program looks for a so that it can 
assign ans, it can't find a! Now, when we look at the rec(str,int,int) 
function, it appears that ans is only ever equal to the empty string (""), 
so let's just get rid of it wherever it appears. The new line looks like 
this:

{string a = rec(abs(x), abs(y));}

The function declaration only has 2 parameters (x and y), and all of the 
return statements in rec(int,int) are exactly as they were before, just 
without ans.

Second, there are some inconsistencies with the checks to xx and yy where 
the program looks to invert directions. I'll leave it to you to determine 
which ones need adjustment.

Best,
Matt

On Tuesday, April 21, 2020 at 12:21:24 PM UTC-4, Abhishek Mohanty wrote:
>
> #include<bits/stdc++.h>
>
> using namespace std;
>
> string rec(string ans, int x, int y){
> if(x + y == 0){
> return "";
> }
> if(x == 1 && y == 0) return ans + 'E';
> if(x == -1 && y == 0) return ans + 'W';
> if(x == 0 && y == 1) return ans + 'N';
> if(x == 0 && y ==  -1) return ans + 'S';
> if(x % 2 == 0){
> if((((y + 1) + x) / 2) % 2 == 1) return ans + 'S' + rec(ans, x/2, (y + 
> 1)/2);
>
> if((((y - 1) + x) / 2) % 2 == 1) return ans + 'N' + rec(ans, x/2, (y - 
> 1)/2);
> }
> if(y % 2 == 0){
> if((((x + 1) + y) / 2) % 2 == 1) return ans + 'W' + rec(ans, (x + 1)/2, 
> y/2);
> if((((x - 1) + y) / 2) % 2 == 1) return ans + 'E' + rec(ans, (x - 1)/2, 
> y/2);
> }
> }
>
> void solve(){
> int xx, yy;
> cin>>xx>>yy;
> int x = abs(xx);
> int y = abs(yy);
> int total = x + y;
> if(total % 2 == 0){cout<<"IMPOSSIBLE"<<endl;return;}
> string a = rec(a, abs(x), abs(y));
> if(xx < 0 && yy < 0){
> string opp = "";
> for(char c: a){
> if(c == 'N') opp += 'N';
> if(c == 'S') opp += 'S';
> if(c == 'E') opp += 'E';
> if(c == 'W') opp += 'W';
> }
> a  = opp;
> }
> if(xx < 0 && yy < 0){
> string opp = "";
> for(char c: a){
> if(c == 'N') opp += 'S';
> if(c == 'S') opp += 'N';
> if(c == 'E') opp += 'W';
> if(c == 'W') opp += 'E';
> }
> a  = opp;
> }
> if(xx < 0 && yy > 0){
> string opp = "";
> for(char c: a){
> if(c == 'N') opp += 'N';
> if(c == 'S') opp += 'S';
> if(c == 'E') opp += 'W';
> if(c == 'W') opp += 'E';
> }
> a  = opp;
> }
> if(xx > 0 && yy < 0){
> string opp = "";
> for(char c: a){
> if(c == 'N') opp += 'S';
> if(c == 'S') opp += 'N';
> if(c == 'E') opp += 'E';
> if(c == 'W') opp += 'W';
> }
> a  = opp;
> }
> cout<<a<<endl; 
> }
> int main(){
> int t;
> cin>>t;
> for(int tt = 1; tt<=t; tt++){
> cout<<"Case #"<<tt<<": ";
> solve();
> }
> return 0;
> }
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Code Jam" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-code+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-code/fc97654f-24c2-4bec-97dc-2ac19bbea111%40googlegroups.com.

Reply via email to