1 条题解

  • 0
    @ 2026-4-5 15:07:55
    // 包含C++所有常用头文件,比赛/刷题常用写法
    #include<bits/stdc++.h>
    using namespace std;
    
    // 定义字符数组,存储所有比赛的胜负记录 W/L/E
    // 题目限制:每行最多25个字符,最多2500行,25*2500足够存储所有数据
    char a [25*2500+5];
    
    // 核心函数:根据 n 分制(11分 或 21分)计算并输出每局比分
    void w(int n ){
        // w 记录华华得分,l 记录对手得分
    	int w=0,l=0;
    	
    	// 遍历所有比赛记录,直到遇到结束标志 E
    	for(int i=0;a[i]!='E';i++){
    		// 统计当前球的得分
    		if(a[i]=='W')w++;   // W 代表华华得1分
    		else l++;           // L 代表对手得1分
    		
    		// 判断本局是否结束:
    		// 条件1:一方得分 ≥ n
    		// 条件2:双方分差 ≥ 2
    		if( (w>=n && w-l>=2) || (l>=n && l-w>=2) ){
    			// 输出本局最终比分
    			cout << w <<":"<<l<<endl;
    			// 比分清零,开始下一局
    			w=l=0;
    		}
    	}
    	// 遍历结束后,输出当前未结束的局的比分(即使没打完也要输出)
    	cout << w <<":"<<l<<endl;
    }
    
    int main(){
    	// 循环读取输入的所有字符,存入数组 a
    	// 无限循环,直到读到 E 停止
    	for(int i =0 ;1;i++){
    		cin >> a[i];         // 读取一个字符
    		if(a[i]=='E') break; // 读到 E 表示输入结束,退出循环
    	}
    	
    	// 第一部分:输出 11 分制的比赛结果
    	w(11);
    	// 按照题目要求,两部分输出之间用一个空行隔开
    	cout << endl;
    	// 第二部分:输出 21 分制的比赛结果
    	w(21);
    	
    	return 0;
    }
    
    
    • 1

    信息

    ID
    4533
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    28
    已通过
    8
    上传者