这次比赛就做出了T1然后被T2卡了2h最后死了
非常良心的一道题
首先,如果只有一个人吃,那么蛋糕就没必要切了。废话
接下来分类讨论:
一、只有两个人吃蛋糕
如果这两个人吃的一样多,切一刀分成就好了。又是废话
否则,我们切两刀把蛋糕分成不等的两份。
二、三个人吃蛋糕(设三人分别吃了 a,b,c 份 )
1.两个人吃的蛋糕量之和等于第三个人
设 a+b=c
显然有c为蛋糕的一半,那么先切一刀平分后再切一刀确保其中一半分成 a b两部分就好了
2.某两个人吃的一样多
设 a = b ,那么先切一刀平分后再切一刀确保其中一半分成 a 和 \frac{c}{2}
2
c
两部分就好了(另一半也会分成这个样子,所以a b 各拿所对应的的一块,c拿走两块 \frac{c}{2}
2
c
解决问题)
3.三人各不相同
先切两刀分出其中一个人的部分,再切一刀把剩下的部分分开,总共最多切三刀(可以参考样例)
题目很良心,样例也很良心
Code
#include<iostream>
#include<cstdio>
using namespace std;
int T,a,b,c,cnt;
int work(){
if(a == 0)cnt ++;if(b == 0)cnt ++;if(c == 0)cnt ++;
if(cnt >= 2)return 0;
if(cnt == 1){
if((a == b) (b == c) (a == c))return 1;
return 2;
}
if((a == b+c) (b == a+c) (c == a+b))return 2;
if((a == b) (b == c) (a == c))return 2;
return 3;
}
int main(){
freopen("cake.in","r",stdin);
freopen("cake.out","w",stdout);
scanf("%d",&T);
while(T--){
cnt = 0;
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",work());
}
fclose(stdin);fclose(stdout);
return 0;
}