zoukankan      html  css  js  c++  java
  • HDU5904【瞎搞】

    哇咔咔,挂完。
    靠着hack的100分挂在了rank167。。。
    就是memset的问题,超时了;用map好了。。
    思路:
    标记a串以当前值为尾的上升子序列长度,然后还是搞b串,每次判一下当前值在a串是否有,有的话取小的和ans比较取大;

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    #include <map>
    #include <queue>
    #include <stack>
    using namespace std;
    #define INF 0x3f3f3f
    #define pi acos(-1.0)
    const int N=1e5+10;
    map<int,int>vis1;
    map<int,int>vis2;
    int a[N],b[N],i,j,n1,n2;
    int tmax;
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n1,&n2);
            for(i=1; i<=n1; i++)
                scanf("%d",&a[i]);
            for(i=1; i<=n2; i++)
                scanf("%d",&b[i]);
            vis1.clear();
            vis2.clear();
            for(int i=1;i<=n1;i++)
            {
                if(vis1[a[i]-1])
                {
                    vis1[a[i]]=vis1[a[i]-1]+1;
                }
                else
                {
                    vis1[a[i]]=1;
                }
            }
            int ans=0;
            for(int i=1;i<=n2;i++)
            {
                if(vis2[b[i]-1])
                {
                    vis2[b[i]]=vis2[b[i]-1]+1;
                    if(vis1[b[i]]&&vis2[b[i]])
                        ans=max(min(vis1[b[i]],vis2[b[i]]),ans);
                }
                else
                {
                    vis2[b[i]]=1;
                    if(vis1[b[i]]&&vis2[b[i]])
                        ans=max(min(vis1[b[i]],vis2[b[i]]),ans);
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    【数据结构】Trie(字典树、前缀树)
    【数据结构】优先队列
    【数据结构】堆
    【数据结构】二分搜索树
    【数据结构】哈希表
    【数据结构】链表
    【数据结构】队列
    Python项目案例开发从入门到实战
    Matlab
    Matlab
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934760.html
Copyright © 2011-2022 走看看