社区讨论

为啥不能用getline?

学术版参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mi8ew7jo
此快照首次捕获于
2025/11/21 13:20
4 个月前
此快照最后确认于
2025/11/21 15:31
4 个月前
查看原帖
题目如下。

题目描述

一个给定的子序列是在该序列中删去若干元素后得到的序列。例如,序列 Z=<B,C,D,B>Z=<B,C,D,B> 是序列 X=<A,B,C,B,D,A,B>X=<A,B,C,B,D,A,B> 的子序列。
给定两个序列 X 和 Y,当另一序列 Z 既是 X 的子序列又是 Y 的子序列时,称 Z 是序列 X,Y 的公共子序列。
求给定的两个序列中,最长公共子序列的长度。

输入

共两行,分别表示两个序列,序列长度均小于 1000。

输出

一个整数,即两个序列的公共子序列的长度。

输入数据 1

CPP
aabaaecd
abcd

输出数据 1

CPP
4



本人代码如下。
错误代码:
CPP
//998244353
#include<bits/stdc++.h>
#define itn int
using namespace std;
const int N=1010;
int dp[N][N];
string a,b;
int main()
{
	memset(dp,0,sizeof(dp));
	getline(cin,a);
	getline(cin,b);
	for(int i=0;i<a.size();i++)
	{
		for(int j=0;j<b.size();j++)
		{
			if(a[i]==b[j])
			{
				dp[i+1][j+1]=dp[i][j]+1;
			}
			dp[i+1][j+1]=max({dp[i+1][j+1],dp[i][j+1],dp[i+1][j]});
		}
	}
	cout<<dp[a.size()][b.size()];
}
正确代码:
CPP
//998244353
#include<bits/stdc++.h>
#define itn int
using namespace std;
const int N=1010;
int dp[N][N];
string a,b;
int main()
{
	memset(dp,0,sizeof(dp));
	cin>>a>>b;
	for(int i=1;i<=a.size();i++)
	{
		for(int j=1;j<=b.size();j++)
		{
			if(a[i-1]==b[j-1])
			{
				dp[i][j]=dp[i-1][j-1]+1;
			}
			else
			{
				dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
			}
		}
	}
	cout<<dp[a.size()][b.size()];
}
为啥把 getline 换成 cin 就 AC 了?

回复

6 条回复,欢迎继续交流。

正在加载回复...