At the moment you do not know if this was something that was done on purpose. Someone elses shopping could have got mixed up with yours (on the belt) or something that was next to the till could have been accidentally scanned. I am sure if you go to the customer service desk they will refund it for you.
I really don't see how you find it offensive. It is a light hearted advert. I would be very surprised if somebody decided to use that as an example of good oral hygiene.
It was a decision made by the tobacco company's to reduce the size of the pack from 20 to 19. It was either that or then price would go up, on balance they decided to reduce the pack size. Waitrose have nothing to do with it. The packs all clearly state 19 it is for the customer to double check.
I feel using the word disgracful is a little harsh. It was obviously a mistake and due to the nature of what happened it would probably be the only way they could resolve it.