问题描述
小U正在检查某同学的选择题答案。试卷共有 n 道题目,每道题目只有两个选项 A 和 B。当前小U手上有两组答案:
s:该同学的原始答案。t:标准答案。
小U想知道,如果将该同学的所有答案都反选(即:如果某题的答案是 A 则改成 B,如果是 B 则改成 A),那么在反选之后,正确的答案数量是否会增加?具体结果有三种可能:
- 如果反选后的正确答案数 增加,输出 "yes"。
- 如果反选后的正确答案数 不变,输出 "draw"。
- 如果反选后的正确答案数 减少,输出 "no"。
测试样例
样例1:
输入:
n = 2,s = "AB",t = "AA"
输出:'draw'
样例2:
输入:
n = 3,s = "BAA",t = "ABB"
输出:'yes'
样例3:
输入:
n = 4,s = "ABAB",t = "BABA"
输出:'yes'
解题思路
-
原始正确答案数:
- 遍历每一道题目,比较
s和t的对应字符。 - 如果
s[i] == t[i],则原始答案正确。
- 遍历每一道题目,比较
-
反选后的正确答案数:
- 反选后的答案可以通过将
s中的每个字符取反(A变B,B变A)来得到。 - 再次遍历每一道题目,比较反选后的答案和
t的对应字符。 - 如果反选后的答案
flipped[i] == t[i],则反选后的答案正确。
- 反选后的答案可以通过将
-
比较结果:
- 比较原始正确答案数和反选后的正确答案数。
- 根据比较结果输出 "yes"、"draw" 或 "no"。
数据结构选择
- 使用字符串
s和t来存储答案。 - 使用整数变量来记录原始正确答案数和反选后的正确答案数。
算法步骤
-
初始化两个计数器
original_correct和flipped_correct。 -
遍历每一道题目:
- 如果
s[i] == t[i],增加original_correct。 - 计算反选后的答案
flipped,如果flipped == t[i],增加flipped_correct。
- 如果
-
比较
original_correct和flipped_correct,输出相应的结果。
代码展示
#include <string>
using namespace std;
std::string solution(int n, std::string s, std::string t) {
int original_correct = 0; // 原始答案正确的数量
int flipped_correct = 0; // 反选答案正确的数量
for (int i = 0; i < n; ++i) {
if (s[i] == t[i]) {
++original_correct;
}
// 模拟反选后的答案
char flipped = (s[i] == 'A') ? 'B' : 'A';
if (flipped == t[i]) {
++flipped_correct;
}
}
// 比较原始正确答案和反选正确答案的数量
if (flipped_correct > original_correct) {
return "yes";
} else if (flipped_correct == original_correct) {
return "draw";
} else {
return "no";
}
}
int main() {
cout << (solution(2, "AB", "AA") == "draw") << endl; // 输出 1
cout << (solution(3, "BAA", "ABB") == "yes") << endl; // 输出 1
cout << (solution(4, "ABAB", "BABA") == "yes") << endl; // 输出 1
return 0;
}
代码说明:
original_correct统计原始答案正确的题目数。flipped_correct统计反选后的答案正确的题目数。- 遍历答案数组,计算两种情况下的正确答案数量。
- 比较
flipped_correct和original_correct,返回结果。