洛谷 P1042 [NOIP2003 普及組] 乒乓球

洛谷 P1042 [NOIP2003 普及組] 乒乓球

題目背景

國際乒聯現在主席沙拉拉自從上任以來就立志于推行一系列改革,以推動乒乓球運動在全球的普及。其中 11 11 11 分制改革引起了很大的爭議,有一部分球員因為無法適應新規則只能選擇退役。華華就是其中一位,他退役之后走上了乒乓球研究工作,意圖弄明白 11 11 11 分制和 21 21 21 分制對選手的不同影響。在開展他的研究之前,他首先需要對他多年比賽的統計數據進行一些分析,所以需要你的幫忙。

題目描述

華華通過以下方式進行分析,首先將比賽每個球的勝負列成一張表,然后分別計算在 11 11 11 分制和 21 21 21 分制下,雙方的比賽結果(截至記錄末尾)。

比如現在有這么一份記錄,(其中 W \texttt W W 表示華華獲得一分, L \texttt L L 表示華華對手獲得一分):

WWWWWWWWWWWWWWWWWWWWWWLW \texttt{WWWWWWWWWWWWWWWWWWWWWWLW} WWWWWWWWWWWWWWWWWWWWWWLW

11 11 11 分制下,此時比賽的結果是華華第一局 11 11 11 0 0 0 獲勝,第二局 11 11 11 0 0 0 獲勝,正在進行第三局,當前比分 1 1 1 1 1 1。而在 21 21 21 分制下,此時比賽結果是華華第一局 21 21 21 0 0 0 獲勝,正在進行第二局,比分 2 2 2 1 1 1。如果一局比賽剛開始,則此時比分為 0 0 0 0 0 0。直到分差大于或者等于 2 2 2,才一局結束。

你的程序就是要對于一系列比賽信息的輸入( WL \texttt{WL} WL 形式),輸出正確的結果。

輸入格式

每個輸入文件包含若干行字符串,字符串有大寫的 W \texttt W W L \texttt L L E \texttt E E 組成。其中 E \texttt E E 表示比賽信息結束,程序應該忽略 E \texttt E E 之后的所有內容。

輸出格式

輸出由兩部分組成,每部分有若干行,每一行對應一局比賽的比分(按比賽信息輸入順序)。其中第一部分是 11 11 11 分制下的結果,第二部分是 21 21 21 分制下的結果,兩部分之間由一個空行分隔。

樣例 #1

樣例輸入 #1

WWWWWWWWWWWWWWWWWWWW
WWLWE

樣例輸出 #1

11:0
11:0
1:121:0
2:1

提示

每行至多 25 25 25 個字母,最多有 2500 2500 2500 行。

(注:事實上有一個測試點有 2501 2501 2501 行數據。)

【題目來源】

NOIP 2003 普及組第一題

解題


#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>using namespace std;char datal[101];int main() {int scorea11=0,scorea21 = 0;int scoreb11=0,scoreb21 = 0;queue<string> ans11,ans21;bool isEnd=false;string ans="";do {cin >> datal;int len = strlen(datal); //讀取一行數據進行處理for (int i=0; i<len; i++) {if (datal[i] == 'W') {scorea11++;scorea21++;} else if (datal[i] ==  'L') {scoreb11++;scoreb21++;// 找到結束符號時,把當前分數打印} else if (datal[i] == 'E') {// 設置結束標識符為true,以結束循環isEnd = true;// 使用string拼接結果字符串ans = "";ans.append(to_string(scorea11));ans.append(":");ans.append(to_string(scoreb11));ans11.push(ans); // 放到結果隊列中scorea11 = 0;scoreb11 = 0;ans = "";ans.append(to_string(scorea21));ans.append(":");ans.append(to_string(scoreb21));ans21.push(ans);// 放到結果隊列中scorea21 = 0;scoreb21 = 0;break;}// 11分制,一局比賽結束if ((scorea11 >= 11 || scoreb11 >= 11) && abs(scorea11 - scoreb11)>=2) {ans = "";ans.append(to_string(scorea11));ans.append(":");ans.append(to_string(scoreb11));ans11.push(ans);scorea11 = 0;scoreb11 = 0;}// 21分制,一局比賽結束if ((scorea21 >= 21 || scoreb21 >= 21)&& abs(scorea21-scoreb21) >= 2) {ans = "";ans.append(to_string(scorea21));ans.append(":");ans.append(to_string(scoreb21));ans21.push(ans);scorea21 = 0;scoreb21 = 0;}}} while(!isEnd);// 打印兩個隊列中的數據while(!ans11.empty()) {cout << ans11.front() << endl;ans11.pop();}cout << endl;while(!ans21.empty()) {cout << ans21.front() << endl;ans21.pop();}
}

以上解題使用到了queue和string兩個類型,需要掌握這兩個類的使用才能很好理解。

queue說明:

C++中的queue是一個容器適配器,它提供了先進先出(FIFO)的數據結構。以下是queue的一些主要內置函數:
1.push(const value_type& val): 在隊列的末尾插入一個元素。
2.pop(): 刪除隊列的第一個元素。
3.front(): 返回隊列的第一個元素的引用。
4.back(): 返回隊列的最后一個元素的引用。
5.empty(): 如果隊列為空,則返回true,否則返回false。
6.size(): 返回隊列中的元素數量。
7.swap(queue& other): 交換兩個隊列的內容。
8.emplace(Args&&… args): 在隊列的末尾構造一個新元素。
9.emplace_front(Args&&… args): 在隊列的開頭構造一個新元素。
10.emplace_back(Args&&… args): 在隊列的末尾構造一個新元素(與push相同)。
注意:在使用這些函數之前,需要包含頭文件 #include <queue>。

string 說明

C++中的string類型提供了許多內置函數,以下是一些常用的:

  1. length() 或 size(): 返回字符串的長度。
  2. empty(): 檢查字符串是否為空。
  3. append(str):將另一個字符串添加到當前字符串的末尾。
  4. insert(pos, str): 在指定位置插入另一個字符串。
  5. erase(pos, len): 刪除從指定位置開始的len個字符。
  6. replace(pos, len, str): 替換從指定位置開始的len個字符為另一個字符串。
  7. substr(pos, len): 返回從指定位置開始的len個字符組成的子字符串。
  8. find(str, pos): 從指定位置開始查找子字符串的位置,如果找不到則返回string::npos。
  9. rfind(str, pos): 從指定位置開始反向查找子字符串的位置,如果找不到則返回string::npos。
  10. compare(str): 比較兩個字符串,返回值為0表示相等,小于0表示當前字符串小于參數字符串,大于0表示當前字符串大于參數字符串。
  11. swap(str): 交換兩個字符串的內容。 c_str(): 返回一個指向以null結尾的字符數組的指針,該字符數組與原字符串內容相同。
  12. at(pos): 返回位于指定位置的字符的引用,如果越界則拋出std::out_of_range異常。
  13. push_back(char): 在字符串末尾添加一個字符。
  14. pop_back(): 刪除字符串末尾的字符。
  15. resize(new_size, char): 調整字符串的大小,如果新大小大于原來的大小,則用指定的字符填充新增的空間。
  16. capacity(): 返回字符串的容量(分配給字符串的內存空間大小)。
  17. reserve(new_cap): 預留足夠的內存空間以容納至少new_cap個字符。
  18. shrink_to_fit(): 釋放未使用的內存空間,使容量等于大小。
  19. operator+=, operator+, operator==, operator!=, operator<, operator>, operator<=, operator>=: 重載了加法、賦值、比較等運算符。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40789.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024亞洲國際餐飲展覽會(北京餐飲展|火鍋展|預制菜展會)

2024北京餐飲展會&#xff0c;2024北京食材展會&#xff0c;2024北京火鍋展會&#xff0c;2024北京火鍋食材展會&#xff0c;2024北京預制菜展會&#xff0c;2024北京預制食材展會&#xff0c; 2024亞洲國際餐飲展覽會&#xff08;北京餐飲展|火鍋展|預制菜展會&#xff09; …

【C語言】刷題筆記 Day2

【筆記】 【1】局部變量不初始化&#xff0c;默認放的隨機值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】這里雖然輸入的是一個浮點數&#xff0c;但是只取整數部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多組輸入&#xff0c;保存和不保存…

基于 Windows Server 2019 部署域控服務器

文章目錄 前言1. 域控服務器設計規劃2. 安裝部署域控服務器2.1. 添加 Active Directory 域服務2.2. 將服務器提升為域控制器2.3. 檢查域控服務器配置信息 3. 管理域賬號3.1. 新建域管理員賬號3.2. 新建普通域賬號 4. 服務器加域和退域4.1. 服務器加域操作4.2. 服務器退域操作 總…

Iperf基本用法

Iperf是一款開源的網絡性能測試工具&#xff0c;它可以用來測量網絡帶寬、延遲、抖動和數據包丟失等網絡性能指標。Iperf支持TCP和UDP協議&#xff0c;可以用于點對點或客戶端-服務器等模式的網絡測試。 安裝Iperf 在Linux系統中&#xff0c;您可以使用包管理器安裝Iperf。例如…

記錄一下簡單導入導出excel二級表頭

數據庫導入導出表頭 之前的工具類GenerateExcelToFile新增兩個導出這種二級表頭方法 package com.njry.utils;import cn.hutool.core.util.IdUtil; import com.njry.config.FileProperties; import com.njry.exception.BadRequestException; import org.apache.poi.hssf.user…

OpenGL的學習之路

Qt如何創建OpenGL的渲染窗口&#xff1f; 類比GLFW庫&#xff0c;Qt提供了OpenGL的渲染窗口類QOpenGLWidget&#xff1a; 1、重寫initializeGL()和resizeGL()函數來設置OpenGL狀態并提供透視圖轉換。 2、重寫paintGL()來繪制3D場景&#xff0c;只調用OpenGL函數。 3、還可以…

python 基礎綜合應用——小開發

#python 基礎綜合應用——小開發 綜合復習 變量- 循環- 函數- 模塊 開發 名片管理系統 名片管理系統介紹 名片管理系統可以理解成花名冊軟件&#xff0c;通過個人新建人的信息后可以進行查詢等簡單操作的程序 名片管理系統有三個作用&#xff0c; 1.新建名片 2.顯示全部名…

【設計模式】裝飾者模式里Java實現

插&#xff1a; AI時代&#xff0c;程序員或多或少要了解些人工智能&#xff0c;前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家(前言 – 人工智能教程 ) 堅持不懈&#xff0c;越努力越幸運&#xff0c;大家…

【VIM的使用】

Vim 是一個非常強大的文本編輯器&#xff0c;尤其在 Linux 環境下被廣泛使用。它基于 vi 編輯器開發而來&#xff0c;增加了許多功能和改進。下面是一個簡化的 Vim 教程&#xff0c;幫助你快速上手&#xff1a; 啟動 Vim 要啟動 Vim&#xff0c;只需在終端中輸入 vim [filen…

Leetcode刷題2---兩數相加 Python

目錄 題目及分析解法一: 迭代法解法二: 遞歸法解法三&#xff1a;反轉鏈表法 題目及分析 &#xff08;力扣序號2&#xff1a;兩數相加&#xff09; 給你兩個非空的鏈表&#xff0c;表示兩個非負的整數。它們每位數字都是按照逆序的方式存儲的&#xff0c;并且每個節點只能存儲…

python之音頻處理(2)兩個音頻文件的合并

from pydub import AudioSegment# 加載兩個音頻文件 audio1 AudioSegment.from_file(r"D:\websiteDownload\huanxing.wav") audio2 AudioSegment.from_file(r"D:\websiteDownload\我今天被一件事情搞得很煩.wav")# 設置間隔&#xff08;單位&#xff1a;…

Altium Designer專業PCB設計軟件下載安裝 Altium Designer安裝包下載獲取

在電子設計的廣袤領域中&#xff0c;PCB設計無疑占據著重要的地位。而Altium Designer作為一款業界領先的電子設計自動化軟件&#xff0c;其提供的先進布局工具&#xff0c;無疑為設計師們打開了一扇通往高效、精確設計的大門。 在PCB設計的核心環節——布局中&#xff0c;Alti…

初學Spring之自動裝配 Bean

Bean 的作用域&#xff1a; 1.單例模式&#xff08;Spring 默認機制&#xff09; scope“singleton” 2.原型模式&#xff1a;每次從容器中 get 時&#xff0c;都會產生一個新對象 scope"prototype" 3. request、session、application&#xff0c;只能在 web 開…

《c語言結構體怎么函數傳參》

在C語言中&#xff0c;結構體&#xff08;struct&#xff09;是一種用戶自定義的數據類型&#xff0c;用于組合多個不同類型的數據成員。當你要將結構體作為參數傳遞給函數時&#xff0c;可以按照以下幾種方式進行&#xff1a; 值傳遞&#xff08;Pass by Value&#xff09;&a…

【pytorch擴展】CUDA自定義pytorch算子(簡單demo入手)

Pytorch作為一款優秀的AI開發平臺&#xff0c;提供了完備的自定義算子的規范。我們用torch開發時&#xff0c;經常會因為現有算子的不足限制我們idea的迸發。于是&#xff0c;CUDA/C自定義pytorch算子是不得不磕了。 今天通過一個小實驗來梳理自定義pytorch算子都需要做哪些準…

軟設之類的繼承與泛化,多重繼承

在類中&#xff0c;假如父類已經寫好屬性或方法&#xff0c;子類想要實現相同的功能&#xff0c;不用專門寫代碼&#xff0c;直接用專門的繼承語言繼承就可以了。 比如說有一個動物類&#xff0c;有毛色和叫這兩個屬性和方法&#xff0c;又寫了一個子類是貓類&#xff0c;貓類…

騰訊云COS分布式對象存儲

騰訊云COS分布式對象存儲 騰訊云對象存儲&#xff08;Cloud Object Storage&#xff0c;COS&#xff09;是騰訊云提供的一種用于存儲海量文件的分布式存儲服務。 騰訊云 COS 適用于多種場景&#xff0c;如靜態網站托管、大規模數據備份和歸檔、多媒體存儲和處理、移動應用數據存…

Kafka搭建(單機版)

部署前提 VMware環境 : 兩臺centos系統 Jdk包:jdk-8u202-linux-x64.tar.gz Kafka包:kafka_2.12-3.5.0.tgz Zookeeper包:apache-zookeeper-3.7.2-bin.tar.gz 百度網盤自取: 鏈接: https://pan.baidu.com/s/11EWuhBoSmH3musd_3Rgodw?pwde32t 提取碼: e32t Kafka搭建&#xff08;…

Camtasia 2024新功能 Camtasia2024更新介紹:AI剪輯助力微課制作 Camtasia2024密鑰 Camtasia2023免費升級更新

Camtasia 是一款功能強大的屏幕錄制和視頻編輯軟件&#xff0c;廣泛應用于教育、商業和娛樂領域。無論是創建教學視頻、產品演示、教程還是營銷內容&#xff0c;Camtasia都能提供專業的工具和功能&#xff0c;幫助用戶制作高質量的視頻內容。 Camtasia 2024 中文免費安裝包百度…

暑假學習DevEco Studio第2天

學習目標&#xff1a; 掌握頁面跳轉 學習內容&#xff1a; 跳轉頁面 創建頁面&#xff1a; 在“project”窗口。打開“entry>src>main>ets”,右擊“pages”&#xff0c;選擇“New>ArkTS File”,命名“Second”&#xff0c;點擊回車鍵。 在頁面的路由&#xff0…