cf B George and Round

时间:2023-01-19 22:40:05

题意:输入n,m,下一行为n个数a1<a2<a3......<an;然后再输入m个数b1<=b2<=b3<.....<=bm; 每个ai都必须在b中找到相等的数,找不到可以让比ai的大的数转化为ai,问最少需要添加几个数,使得ai在b都能找到相等的数。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int n,m;
int a[],b[];
int vis[];
bool vis1[]; int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(int i=; i<n; i++)
{
scanf("%d",&a[i]);
}
for(int j=; j<m; j++)
{
scanf("%d",&b[j]);
vis[b[j]]++;
}
int ans=;
for(int i=; i<n; i++)
{
if(vis[a[i]]) {vis[a[i]]--; vis1[a[i]]=true;}
}
for(int i=; i<n; i++)
{
if(!vis[a[i]]&&!vis1[a[i]])
{
bool flag=false;
for(int j=; j<m; j++)
{
if(b[j]<a[i]) continue;
if(vis[b[j]]==) continue;
vis[b[j]]--;
flag=true;
break;
}
if(!flag) ans++;
}
}
printf("%d\n",ans);
}
return ;
}