HDU-2060 Snooker
代码
#include <iostream>
using namespace std;
int a[6] = {7, 6, 5, 4, 3, 2};
int main() {
int N;
cin>>N;
for(int i=0; i<N; i++){
int Ball_Left, P_Score, O_Score;
cin>>Ball_Left>>P_Score>>O_Score;
if(Ball_Left>6){
P_Score += 8*(Ball_Left-6)+27;
}
else{
for(int j=0; j<Ball_Left; j++){
P_Score += a[j];
}
}
if(P_Score>=O_Score){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
return 0;
}
注解
1、仔细读题,最后一句话说了,如果分数相同也输出Yes。
2、读懂斯诺克的规则,当所剩球数小于等于6时,是没有红球了,且所剩球的颜色也是已知的。也就是必须按该顺序:yellow(2 point), green(3 point), brown(4 point), blue(5 point), pink(6 point), black(7 point)。因此得分就可以算出来了。
当所剩球数大于6时,证明还有红球。此时要想得分最大,就是每次打完红球就打黑球。因此得分是P_Score += 8*(Ball_Left-6)+27;