"We won the game. And that's the most important thing," he said.
Cabrera, who tops all major league third basemen with 85 hits, was 2-for-5 and raised his average to .337. He connected off starter Jorge De La Rosa in the fifth and added a second two-run shot off Joel Peralta that made it 9-3 in the sixth.
John Buck homered twice for Kansas City, raising his team-leading total to 12.
Olivo had two doubles and three singles, tying a club record one night after going 3-for-4. It was the 11th time a Marlins batter had gone 5-for-5, and raised his average against the Royals to .416 (37-for-89) with 22 RBI. He also had a stolen base, raising his career total to 25.
And which team has he stolen the most bases (five) against? Kansas City, of course.
"I come here and I feel comfortable on this field," he said. "It's a beautiful park. And it's so big. I just let the ball come to me."
Florida manager Fredi Gonzalez said before the game he would give Olivo a day off Sunday.
"I think we're going to let Olivo catch tomorrow," he said with a grin afterward.
Cabrera's 16 home runs trail only Alex Rodriguez among big league third basemen.
"Cabrera's Cabrera," Gonzalez said. "He's got a chance to win player of the week every week the way he swings the bat. He's not one of those guys who gets in bad funks."
Vanden Hurk (2-2) went six-plus innings for the Marlins and gave up six runs -- five earned. He walked two in his sixth major league start. He learned afterward he's going down to Double-A Carolina. The Marlins are making room for right-hander Josh Johnson, who is coming off the DL.
"We want him to keep pitching every five days. We don't want to stick him in the bullpen," Gonzalez said. "He means a lot to this organization. He knows he can pitch here and we know he can pitch here."
Vanden Hurk took the news calmly.
"It's always possible. We're blessed to play this game," he said. "I'm just going to go back down and do the same thing like always. I'm going to work hard."
Kevin Gregg allowed Esteban German's RBI single in the ninth before finishing up for his 11th save in 11 chances. Gregg got Mark Teahen to hit into a double play -- for the third time in the game -- and Mike Sweeney flied out.
It was the fourth loss in five starts for De La Rosa (4-7), who gave up seven runs and 13 hits in 4 2/3 innings, with one walk and four strikeouts. The right-hander hasn't won since May 13 and was coming off his shortest outing of the year.
He gave up back-to-back doubles by Alfredo Amezaga and Dan Uggla leading off the game. After Cabrera's first two-run homer in the fifth, Olivo doubled home a run and scored on Jason Wood's RBI single for a 7-3 lead.
Sweeney doubled home two runs in the first, and Buck homered leading off the second. His second homer, off Armando Benitez in the eighth, made it 9-7.
"I just try to stay within myself," Buck said. "I was just trying to make solid contact and I got some good wood on it."
The Royals scored three times in the seventh, starting with an RBI double by Tony Pena Jr. After Joey Gathright chased Vanden Hurk with a bloop single, David DeJesus greeted reliever Taylor Tankersley with a two-run single that cut it to 9-6.
- German, the Royals' appointed fill-in while 2B Mark Grudzielanek recovers from knee surgery, was supposed to get the night off to rest his sore back and hip. He pinch hit in the seventh and stayed in. His replacement, Fernando Cortez, got his second and third major league hits.
- Cabrera's previous multihomer game was Aug. 23 at Washington.
- Florida LHP Dontrelle Willis hand is just fine and he will make his regularly scheduled start Tuesday at the Chicago White Sox. There was concern he had injured the hand while covering first base on Thursday.