题解:P12887 [蓝桥杯 2025 国 Java B] 答题数量
题解:P12887 [蓝桥杯 2025 国 Java B] 答题数量
本题重点即为如何求出小蓝和他的好朋友都答对的题的取值范围。
设只有小蓝答对的题为 \(T_b\),只有朋友答对的题数量为 \(T_f\),他们都答对的题数目为 \(S_{T}\),他们答案相同的题目数为 \(S\)。题目总数为 \(N\)。
我们要求出 \({S_{T}}_{max}\)。因为朋友答对的所有题数量为 \(M\),当 \(S>M\) 时,显然 \({S_{T}}_{max}=M\)。反之,\({S_{T}}_{max}=S\)。因此 \(S_{T}\) 的区间为 \([0,\min(S,M)]\),即 \({S_{T}}_{max}=\min(S,M)\)。
接下来我们来看不同位置,因为此时两人答案不同,所以只有一人对一人错。此时因为两人答案相同的题目数为 \(S\),所以他们答案不相同的题目数为 \(N-S\),只有小蓝答对的题数为 \(T_b=N-S-T_f\)。
综上,答案为:
\[\begin{align*}
T_b+{S_{T}}_{max} &= {S_{T}}_{max} + N-S- T_f\\
&= {S_{T}}_{max} + N-S- (M-{S_{T}}_{max})\\
&= 2 \cdot {S_{T}}_{max} + N-S- M\\
&= 2 \cdot \min(S,M)+N-S- M
\end{align*}
\]
//C++
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,cnt;
string s,t;
int main(){
cin>>n>>m;
cin>>s>>t;
for(int i=0;i<n;i++){
if(s[i]==t[i]) cnt++;
}
ll ans=2*min(cnt,m)+n-cnt-m;
cout<<ans;
return 0;
}
//java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
long n=scanner.nextLong();
long m=scanner.nextLong();
scanner.nextLine();
String s=scanner.nextLine();
String t=scanner.nextLine();
long cnt=0;
for (int i=0;i<n;i++){
if(s.charAt(i)==t.charAt(i)) cnt++;
}
long ans=2*Math.min(cnt,m)+n-cnt-m;
System.out.println(ans);
}
}