You're certainly on the right track for (a1) and (b1). I'm not clear on what (c1) means by "contact" - aren't both blocks and the spring in contact at all times? Or is the problem that one block is dropped onto the second and the spring?
As for the second problem, let me see if I can set up the physical situation for you:
The spring is pulling on the bottom mass with the Hooke's law spring force F=-kx. The bottom mass is pulling on the top mass with a frictional force with maximum value f. Suppose that the spring is not displaced very much, then the force on the bottom mass will be small, and therefore there is enough friction for it to drag the top mass along with it. But now if we increase the displacement, we increase the spring force on the bottom mass. At some point, the bottom mass will exert the maximum frictional force on the top mass. When this happens, the top mass will start to slide off (because there isn't enough friction to prevent motion of the top mass relative to the bottom mass). Your goal is to find the force (or, equivalently, the acceleration) when this happens.
So I would suggest:
1) Write out Newton's second law for the bottom mass, including both the spring force and the frictional force
2) Write out Newton's second law for the top mass, including the frictional force.
When you set these equations up, use f for the frictional force - this means you're considering the case when the maximum amount of frictional force is exerted. You want to solve these equations assuming that both the bottom mass and the top mass move together (i.e. have the same acceleration). If you set them up this way, you are solving for the acceleration the two blocks have (together) when the friction is at its maximum value.
Is that any clearer?