cf B George and Round

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

 1 #include <cstdio>

 2 #include <cstring>

 3 #include <algorithm>

 4 using namespace std;

 5 

 6 int n,m;

 7 int a[3010],b[3010];

 8 int vis[3010000];

 9 bool vis1[3000100];

10 

11 int main()

12 {

13     while(scanf("%d%d",&n,&m)!=EOF)

14     {

15         memset(a,0,sizeof(a));

16         memset(b,0,sizeof(b));

17         for(int i=0; i<n; i++)

18         {

19             scanf("%d",&a[i]);

20         }

21         for(int j=0; j<m; j++)

22         {

23             scanf("%d",&b[j]);

24             vis[b[j]]++;

25         }

26         int ans=0;

27         for(int i=0; i<n; i++)

28         {

29             if(vis[a[i]]) {vis[a[i]]--; vis1[a[i]]=true;}

30         }

31         for(int i=0; i<n; i++)

32         {

33            if(!vis[a[i]]&&!vis1[a[i]])

34            {

35                bool flag=false;

36                for(int j=0; j<m; j++)

37                {

38                    if(b[j]<a[i]) continue;

39                    if(vis[b[j]]==0) continue;

40                    vis[b[j]]--;

41                    flag=true;

42                    break;

43                }

44                if(!flag) ans++;

45            }

46         }

47         printf("%d\n",ans);

48     }

49     return 0;

50 }
View Code

 

你可能感兴趣的:(round)