You need to compute two scalar products, each for 0 bit and 1 bit. Then just compare it. That'a ALL!!! If you are afraid of amplitude being negative then abs() each product and compare them after. There is no need to fuss about anything: carriers and constant level orthogonal to each other and noise guaranteed to be small by problem statement. Well, if noise was too big betrayer would never be able to transmit his data. Even if every bit was transmitted with differen amplitude and different constant level this approach still would work.
I just do not undestand why this problem is rated soooooo high?!