• 2021 CCPC(Harbin)-B. Magical Subsequence


    Given a sequence A1,A2,⋯,An. As for a subsequence Ab1,Ab2,⋯,Abm(1≤b1

    Input

    The first line contains one integer n(2≤n≤105), denoting the length of given sequence.

    The second line contains nn integers A1,A2,⋯,An(1≤Ai≤100), denoting the given sequence.

    Output

    Output one line containing only one integer, denoting the answer.

    Example

    input

    1. 11
    2. 3 1 4 1 5 9 2 6 5 3 5

    output

    6

    Note

    One possible magical subsequence of length 6 is {A1=3,A5=5,A7=2,A8=6,A9=5,A10=3}. Here 3+5=2+6=5+3=83+5=2+6=5+3=8.

    题意:尽可能选出n对数,使得每对数和相同,第 i 组最小下标要大于第 i-1 组的最大下标,求集合的长度,其实也就是组数x2。可以注意到Ai值是在1~100,这是关键点,因此对数和最小2,最大200。然后我们可以遍历【2~200】,得出答案 ,因为n>=2,最少一组,不存在0组。

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. bool st[205];//记录该i这个数是否使用
    6. int a[100005];
    7. int main()
    8. {
    9. int n,maxn=2;
    10. scanf("%d",&n);
    11. for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    12. for(int sum=2;sum<=200;sum++)
    13. {
    14. int res=0;//记录每个sum下的最大长度
    15. memset(st,false,sizeof st);//多次遍历,初始化
    16. for(int i=1;i<=n;i++)
    17. {
    18. if(a[i]>=sum) continue;
    19. //两数之和大于sum,那么其中一个数肯定小于sum
    20. if(st[sum-a[i]])//当前是a[i],如果sum-a[i]之前没有使用,那么两者就可以凑一对
    21. {
    22. res+=2;
    23. maxn=max(maxn,res);
    24. memset(st,false,sizeof st);
    25. //此处全部清空是因为i之前满足的都已经全部处理了
    26. }else st[a[i]]=true;//标记访问过
    27. }
    28. }
    29. printf("%d\n",maxn);
    30. return 0;
    31. }

  • 相关阅读:
    Sql Server系列:子查询
    自动化测试需知的4项测试工具!
    CDR插件开发之Addon插件007 - Addon插件简介和案例演示
    驱动程序开发:LCD屏显示驱动
    解决WPF+Avalonia在openKylin系统下默认字体问题
    【多目标进化优化】 MOEA 测试函数
    【npm】常用的NPM命令及在开发过程中的应用
    【JVM篇】什么是运行时数据区
    Mysql 中遇到的坑
    nohup 命令的简单理解
  • 原文地址:https://blog.csdn.net/qq_63739337/article/details/127718516