正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2023 第一轮真题 › 第 25 题
CSP-J 2023 第一轮 第 25 题:程序(二):输入 csp-j 和 p-jcs 的输出
题目
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int f(string x,string y){
int m=x.size();
int n=y.size();
vector<vector<int>>v(m+1,vector<int>(n+1,0));
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(x[i-1]==y[j-1]){
v[i][j]=v[i-1][j-1]+1;
}else{
v[i][j]=max(v[i-1][j],v[i][j-1]);
}
}
}
return v[m][n];
}
bool g(string x,string y){
if(x.size() != y.size()){
return false;
}
return f(x+x,y)==y.size();
}
int main(){
string x,y;
cin>>x>>y;
cout<<g(x,y)<<endl;
return 0;
}
本小题
当输入为 csp-j p-jcs 时,输出为()。
选项
- A. 0
- B. 1
- C. T
- D. F
答案
B
题解
答案是 B.1。
函数 f(x,y) 求的是两个字符串的最长公共子序列长度。子序列中的字符可以不连续,但先后顺序不能改变。
代入 g("csp-j", "p-jcs"):
- 两个字符串长度都是
5,不会直接返回false。 x+x为"csp-jcsp-j",其中可以按顺序找到完整的"p-jcs":
``text x+x:c s p - j c s p - j └─p - j c s─┘ ``
因此 f(x+x,y) = 5,等于 y.size(),g 返回 true。
cout 默认将布尔值 true 输出为 1,所以输出:
``text 1 ``
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号