#P1432. 2023.08.06-第一题-米小游学英语
          
                        
                                    
                      
        
              - 
          
          
                      1000ms
            
          
                      Tried: 371
            Accepted: 138
            Difficulty: 3
            
          
          
          
                       所属公司 : 
                              米哈游
                                
            
                        
              时间 :2023年8月06日
                              
                      
          
 
- 
                        算法标签>模拟          
 
2023.08.06-第一题-米小游学英语
思路:模拟
题目的意思很简单,有t组数据,每组数据中,从前往后,每有一个相同的单词,计一分,不同则扣一分。如果分数扣到负数,就停止比对。然后输出一共有多少组分数在0分以上。
按题意进行模拟即可。
时间复杂度O(N)
代码
C++
#include <bits/stdc++.h>
using namespace std;
int ans = 0; // 答案 
int n; // 单组测试中说的单词数
vector<string> a, b; // 用于存储老师和塔子哥说的单词
string s; 
int main() {
	int T;
    cin >> T;
    while (T--) {
        a.clear();
        b.clear();
        
        cin >> n;
        // 老师
        for (int i = 0; i < n; i++) {
            cin >> s;
            a.push_back(s);
        }
        // 塔子哥 
        for (int i = 0; i < n; i++) {
            cin >> s;
            b.push_back(s);
        }
        int now = 0; // 记录当前分数
        // 比较老师和塔子哥说的单词
        for (int i = 0; i < n; i++) {
            if (a[i] != b[i]) now--; // 如果单词不同、 
            else now++; // 如果单词相同
            // 如果分数变为负数,本次测试失败 
            if (now < 0) break;
        }
        if (now >= 0) ans++;
    }
    cout << ans << endl;
    
    return 0;
}
python
ans = 0  # 答案
T = int(input())
while T > 0:
    n = int(input())  # 单组测试中说的单词数
    a = []  # 用于存储老师说的单词
    b = []  # 用于存储塔子哥说的单词
    # 老师说的单词
    a_input = input().split()
    for word in a_input:
        a.append(word)
    # 塔子哥说的单词
    b_input = input().split()
    for word in b_input:
        b.append(word)
    now = 0  # 记录当前分数
    # 比较老师和塔子哥说的单词
    for i in range(n):
        if a[i] != b[i]:
            now -= 1  # 如果单词不同
        else:
            now += 1  # 如果单词相同
        # 如果分数变为负数,本次测试失败
        if now < 0:
            break
    if now >= 0:
        ans += 1
    T -= 1
print(ans)
Java
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int ans = 0; // 答案
        int n; // 单组测试中说的单词数
        ArrayList<String> a = new ArrayList<>(); // 用于存储老师和塔子哥说的单词
        ArrayList<String> b = new ArrayList<>(); // 用于存储老师和塔子哥说的单词
        String s;
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        while (T > 0) {
            a.clear();
            b.clear();
            n = scanner.nextInt();
            // 老师
            for (int i = 0; i < n; i++) {
                s = scanner.next();
                a.add(s);
            }
            // 塔子哥
            for (int i = 0; i < n; i++) {
                s = scanner.next();
                b.add(s);
            }
            int now = 0; // 记录当前分数
            // 比较老师和塔子哥说的单词
            for (int i = 0; i < n; i++) {
                if (!a.get(i).equals(b.get(i))) now--; // 如果单词不同
                else now++; // 如果单词相同
                // 如果分数变为负数,本次测试失败
                if (now < 0) break;
            }
            if (now >= 0) ans++;
            T--;
        }
        System.out.println(ans);
    }
}
        题目内容
米小游读小学了,学校里新开了英语课。
某一天老师进行了一对一的口语考试,考试内容为复述老师说的话。考试要求每个人一共进行t次测试,每次测试中,老师会说一句话,包含n个单词,米小游每复述出一个单词,就能够获得一分,但是当分数低于0时,本次测试就会结束,并且该次测试未通过。
米小游英语很差,因此他想知道自己一共能通过多少次测试。
输入描述
第一行输入一个正整数t,代表米小游需要进行的测试数量
接下来的3∗t行,每3行用于描述一次测试:
第一行输入一个正整数n,代表老师说的一句话包含的单词数量。
第二行输入n个仅由小写字母组成的字符串,用空格隔开。代表老师说的单词。
第三行输入n个仅由小写字母组成的字符串,用空格隔开。代表米小游复述的话。
1≤t≤10
1≤n≤100
单词的长度均不超过10。
输出描述
一个整数,代表米小游最终通过了多少次测试。
样例
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3
2
hello hello
hello hello
3
how are you
hwo are you
4
how old are you
how old are yuo
输出
2