题解 CF1382A 【Common Subsequence】
_Fontainebleau_ · · 题解
题目大意
给定
分析
有两种方法。
暴力竟然比桶快!
先说暴力。
正常读入
读入
数据那么小,轻松
#include<bits/stdc++.h>
#define FOR(i,j,k) for(int i=(j);i<=(k);i++)
using namespace std;
int n,m,tc;
int a[1001],x;
bool vis[1001];
inline int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int main()
{
tc=read();
while(tc--)
{
memset(vis,false,sizeof(vis));
bool flag=false;
n=read(),m=read();
for(int i=1;i<=n;i++)
a[i]=read(),vis[a[i]]=true;
for(int i=1;i<=m;i++)
{
x=read();
if(!flag)
{
for(int j=1;j<=n;j++)
if(a[j]==x)
{
puts("YES");
printf("1 %d\n",x);
flag=true;
break;
}
}
}
if(!flag) puts("NO");
}
return 0;
}
方法
显然,最小公共子串长度要么为
#include<bits/stdc++.h>
#define FOR(i,j,k) for(int i=(j);i<=(k);i++)
using namespace std;
int n,m,tc;
int a[1001],x;
bool vis[1001];
inline int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int main()
{
tc=read();
while(tc--)
{
memset(vis,false,sizeof(vis));
bool flag=false;
n=read(),m=read();
for(int i=1;i<=n;i++)
a[i]=read(),vis[a[i]]=true;
for(int i=1;i<=m;i++)
{
x=read();
if(vis[x]&&!flag)
{
puts("YES");
printf("1 %d\n",x);
flag=true;
}
}
if(!flag) puts("NO");
}
return 0;
}