I got 100%. This is the puzzle which I feel I had the least confidence, so I just tried whatever and see what happens.
In order to deal with the constant term in program initialization, I sought to calculate the derivative of the input data, so the constant term can be ignored. Then I compared the derivatives against the derivatives of the ideal curve.
To compare the derivates, I chose to divide one gradient against another, this leads to errors with the O(1) curve as the gradient is zero. I hard-coded this case checking if t hasn’t varied much then just output O(1).
Also calculating the curve of O(2^n) leads to overflow in all test cases except the last one due to large n as input. I added a check to ignore this curve when overflow happens.
I was happy that I needed not add any special handling beyond that - no need to cut / remove data or detect outliers.