I have done something similar recently, based on clip output (see the 3rd line), but this will work as well on intersect output - here is the snippet showing the part you're interested in:
import arcpy, time
from operator import itemgetter
arcpy.Clip_analysis('theData', 'buffer500', 'clip500')
 
# define dictionary
summary = dict()
 
rows = arcpy.SearchCursor('clip500')
# type or category is in my feature class called DESCRIPTION.
for row in rows:
        if row.DESCRIPTION in summary:
            summary[row.DESCRIPTION] = summary[row.DESCRIPTION] + row.shape_area
        else:
            summary[row.DESCRIPTION] = row.shape_area
# dictionary now loaded, from here on out are simply acreage conversions, sorting.
sumTotalAc = sum(summary.values())/43560.0
arcpy.AddMessage('\nTotal area: ' + str(sumTotalAc))
sortSummaryAc = sorted(([a, b/43560.0] for a, b in summary.iteritems()), key = itemgetter(1), reverse = True)
arcpy.AddMessage(sortSummaryAc)
EDIT:ahh, you said you are after percentages, which if you think about it is kind of incidental once you have total acreage.  I have the sum(summary.values()) converted to acres, sumTotalAc, above.  I guess I could have computed percentages in the dictionary, but I just did it on-the-fly since I needed individual DESCRIPTION acreages as well as percentage of the total in some text elements displayed on the map ---- so if this makes sense to you, here's that part (the whole script is really too long to make my point clear):
for each in sortSummaryAc:
        testgrab = elmhndl.pop()
        if round(each[1], 1) > 0.0:
            # here's the line adding both the acreage and percentage
            testgrab.text = each[0] + ' - ' + str(round(each[1], 1)) + '  acres   (' + str(round((each[1]/sumTotalAc*100), 1)) + ' %)'    
            index = assign(testgrab, [initPosX, initPosY])
            initPosY = initPosY - float(0.2122)
        else:
            arcpy.AddMessage('\n...' + each[0] + ' is too small, removing element to remaining set...')
            testgrab.text = '-'
            index = assign(testgrab, [initPosX1, initPosY1])
Hope that's clear.Enjoy,Wayne