How to hide specific categories from contributors

You’ll have to change see_special_cats to something fitting. As you want to exclude contributors, but allow all others, you could use publish_posts (See the codex for all capabilities of contributors).

Your code should be something like

add_filter('list_terms_exclusions', 'yoursite_list_terms_exclusions', 10, 2);
function yoursite_list_terms_exclusions( $exclusions, $args ) {

    global $pagenow;
    if (in_array($pagenow,array('post.php','post-new.php')) && 
!current_user_can('publish_posts')) {
        $exclusions = " {$exclusions} AND t.slug NOT IN ('news', 'blog', 'main')";
    }
    return $exclusions;
}

Keep in mind that you might have to adjust the slugs, which I’ve just assumed are news, blog and main.