斯诺克桌面上有 n 顆球。選手 A 當前得分 a,選手 B 得分 b。假設 A 將剩餘所有球全打進,問 A 能否超過或追平 B(即 a + 剩餘球最大得分 ≥ b)。
設剩餘球數 n(包含紅球和彩球)。
說明仍有紅球存在(因彩球固定 6 顆)。剩餘紅球數 = n - 6。
每顆紅球可搭配最高分彩球(黑球 7 分):
紅球得分 = (n-6) × 1
搭配黑球得分 = (n-6) × 7
紅球打完後,依次打 6 顆彩球:2+3+4+5+6+7 = 27
總得分 = (n-6)×8 + 27
無紅球,只剩彩球。為最大化得分,剩餘必為分值最高的 n 顆彩球。
彩球分值:7,6,5,4,3,2(黑到黃)。
前 n 項和 = (7 + (7-n+1)) × n / 2 = (15-n) × n / 2?
實際:最大 n 個數為 7,6,...,(8-n)。和 = (7 + 8-n) × n / 2 = (15-n)n/2。
總得分 = (15-n)n/2
if (n > 6) maxAdd = (n-6)*8 + 27;
else maxAdd = (15-n)*n/2;
if (a + maxAdd >= b) "Yes" else "No"
輸入:n=7, a=0, b=35
n>6 → maxAdd = 1×8+27=35 → a+maxAdd=35 ≥ 35 → Yes。
#include
using namespace std;
int main() {
int T; cin >> T;
while (T--) {
int n, a, b; cin >> n >> a >> b;
int maxAdd = (n > 6) ? (n-6)*8 + 27 : (15-n)*n/2;
cout << (a + maxAdd >= b ? "Yes" : "No") << '\n';
}
return 0;
}
本題核心是理解斯诺克規則並建立剩餘球最大得分公式。分 n>6(有紅球)與 n≤6(純彩球)兩種情況,公式推導清晰,代碼極短。屬於數學建模類水題,關鍵讀懂題意並正確推導公式。