日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字节--踢球问题

發布時間:2024/4/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节--踢球问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字節–踢球問題

文章目錄

  • 字節--踢球問題
    • 一、題目描述
    • 二、分析
    • 三、代碼

一、題目描述

有三只球隊,每只球隊編號分別為球隊1,球隊2,球隊3,這三只球隊一共需要進行 n 場比賽。現在已經踢完了k場比賽,每場比賽不能打平,踢贏一場比賽得一分,輸了不得分不減分。已知球隊1和球隊2的比分相差d1分,球隊2和球隊3的比分相差d2分,每場比賽可以任意選擇兩只隊伍進行。求如果打完最后的 (n-k) 場比賽,有沒有可能三只球隊的分數打平

  • 輸入描述:
第一行包含一個數字 t (1 <= t <= 10) 接下來的t行每行包括四個數字 n, k, d1, d2 (1 <= n <= 10^12; 0 <= k <= n, 0 <= d1, d2 <= k)
  • 輸出描述:
每行的比分數據,最終三只球隊若能夠打平,則輸出“yes”,否則輸出“no”輸入例子1: 2 3 3 0 0 3 3 3 3輸出例子1: yes no例子說明1: case1: 球隊1和球隊20分,球隊2 和球隊3也差0分,所以可能的賽得分是三只球隊各得1分case2: 球隊1和球隊23分,球隊2和球隊33分,所以可能的得分是 球隊10分,球隊23, 球隊30分,比賽已經全部結束因此最終不能打平。

二、分析

  • 因為每場比賽不能打平,踢贏一場比賽得一分,輸了不得分不減分,所以這意味著,所有的比賽總分加起來一定是n,打了k場比賽,那么這k長比賽的總分是k;
  • 要注意比賽場數(10^12)非常大,需要使用long long的類型。
  • 解決這道題的關鍵在于得出三個隊伍的具體比分。
  • 我們取一組數據n=150,k=31,d1=15,d2=17。 無論三個隊伍的比分最終是怎樣的,總是有四種情況
  • 下一個問題是怎么知道三個隊伍的具體得分,也就是得出unknow的值
  • 這非常簡單,由于三個隊伍的總分k(即總比賽場數,注意每一局只有人得分沒有人扣分)是知道的,因此很容易得出unknow的值,接著判斷unknow是不是整數,以及要保證三個隊伍的得分為正。
  • 得出三個隊伍的具體分數后,就可以根據剩余場數n-k進行判斷

例如剩余場數150 - 31 = 119 119 - (22 - 7) - (22 - 5) = 87
由于87是三的倍數,這剩下的87場比賽可以讓3個隊伍平均分得分。
因此是有可能平均的。

三、代碼

#include<iostream> using namespace std;//n代表總場數 //k代表已經進行的場數 //t1代表隊伍1的分數 //... //... bool check(long long n,long long k,long long t1,long long t2,long long t3) {//如果已經進行了k場所獲的的k分,反而不能被3整除,直接返回false//就是4種情況中的前兩種情況if((k - t1 - t2 - t3) % 3 != 0){return false;}else{//相當于求得表中的unknowlong long temp = (k - t1 - t2 - t3) / 3;//求得每個隊伍經過k場后的真實得分的t1 += temp;t2 += temp;t3 += temp;//如果出現某個隊伍的分數為負,直接返回if(t1 < 0 || t2 < 0 || t3 < 0){return false;}else{//獲取3個隊伍當中最大的分數long long max;max = t1 > t2 ? t1 : t2;max = max > t3 ? max : t3;//求把剩下兩個分數較小的隊伍補齊到和最大分數的隊伍所需的分數long long need_remain = 3 * max - t1 - t2 - t3;//n場還剩下的場數,也就是待均分的分數long long remain = n - k;//判斷剩余場數能不能打贏,如果剩下的分數能被3個隊伍均分直接返回true,反之返回false if(need_remain <= remain && (remain - need_remain) % 3 == 0) return true;else{return false;}}} }int main() {long long t;cin >> t;long long n,k,d1,d2;while(t--){cin >> n >> k >> d1 >> d2;//判斷四種情況下每種平局的可能性,只要有一種可能性成立即可 if(check(n,k,d1,0,d2) || check(n,k,d1,0,-d2)||check(n,k,-d1,0,d2)||check(n,k,-d1,0,-d2))cout << "yes"<<endl;else cout << "no"<<endl;}return 0; }

總結

以上是生活随笔為你收集整理的字节--踢球问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。