9-18 fruit.c

 #include <stdio.h>
 #define MAXN 10000
 int Queue1[MAXN], Queue2[MAXN];
 void Insert(int n, int data)    //按增序插入数组
 {
    int i, mid, left, right;
    left = ;
    right = n - ;
     || data >= Queue1[right])    //最大
    {
       Queue1[n] = data;
       return;
    }
    else if (data < Queue1[left])    //最小
    {
       ; i--)
       {
          Queue1[i + ] = Queue1[i];
       }
       Queue1[] = data;
       return;
    }
    while (left <= right)
    {
       mid = (left + right) / ;
       if (Queue1[mid] <= data)
       {
          left = mid + ;
       } else if (Queue1[mid] > data)
       {
          right = mid - ;
       }
    }
    if (Queue1[mid] < data)
       mid++;
    ; i >= mid; i--)    //插入到a[mid]之前
    {
       Queue1[i + ] = Queue1[i];
    }
    Queue1[mid] = data;
 }
 int Calc(int a[], int n)    //按增序插入数组
 {
    int i, frontOld, frontNew, rearNew;
    ;
    )
       ];
    )
       ] + a[];
    ; i < n; i++)    //按增序插入数组
       Insert(i, a[i]);
    //先加上前两个
    frontOld = frontNew = rearNew = ;
    Queue2[rearNew++] = Queue1[frontOld] + Queue1[frontOld + ];
    frontOld += ;
    while (frontOld < n)    //合并Queue1的所有元素
    {
       if (Queue1[frontOld] > Queue2[frontNew])
          sum = Queue2[frontNew++];
       else
          sum = Queue1[frontOld++];

       if (frontNew < rearNew && frontOld < n)
       {
          if (Queue1[frontOld] > Queue2[frontNew])
             sum += Queue2[frontNew++];
          else
             sum += Queue1[frontOld++];
       }
       else if (frontNew < rearNew)
          sum += Queue2[frontNew++];
       else if (frontOld < n)
          sum += Queue1[frontOld++];
       Queue2[rearNew++] = sum;
    }
    )    //如果Queue2的元素没有合并完
    {
       Queue2[rearNew++] = Queue2[frontNew] + Queue2[frontNew + ];
       frontNew += ;
    }
    sum = ;
    ; i < rearNew; i++)
       sum += Queue2[i];
    return sum;
 }
 int main()
 {
    int n, i, sum;
     };
    FILE *fp1, *fp2;
    if ((fp1 = fopen("fruit.in", "r")) == NULL)
    {
       printf("不能打开文件!\n");
       exit();
    }
    fscanf(fp1, "%d\n", &n); //果子种类数
    ; i < n; i++) //各类果子的数量
       fscanf(fp1, "%d", &a[i]);
    fclose(fp1);
    sum = Calc(a, n);
    if ((fp2 = fopen("fruit.out", "w")) == NULL)
    {
       printf("不能打开文件!\n");
       exit();
    }
    printf("%d\n", sum);
    fprintf(fp1, "%d\n", sum);
    fclose(fp2);
    getch();
    ;
 }

9-19 chorus.c

 #include <stdio.h>
 #define MAXN 101
 int main()
 {
    }, flag2[MAXN]={}, a[MAXN]={};
    int n, max;
    int i, j;
    FILE *fp1, *fp2;
    if ((fp1 = fopen("chorus.in", "r")) == NULL)
    {
       printf("不能打开文件!\n");
       exit();
    }
    fscanf(fp1, "%d\n", &n);
    ; i <= n; i++)
       fscanf(fp1, "%d", &a[i]);
    fclose(fp1);
    a[] = ;    //设置为一个最小值
    ; i <= n; i++) //用动规求最长升序序列
    {
       ; j >= ; j--)
       {
           > flag1[i]))
             flag1[i] = flag1[j] + ;
       }
    }
    a[n + ] = ;    //最后设置一个最小值
    ; i--)//用动规求最长降序序列
    {
       ; j <= n + ; j++)
       {
           > flag2[i])
             flag2[i] = flag2[j] + ;
       }
    }
    max = ;
    ; i <= n; i++) //计算升序和降序序列的最多人数
    {
       if (flag1[i] + flag2[i] > max)
       {
          max = flag1[i] + flag2[i];
          printf("%d,%d\n",flag1[i],flag2[i]);
       }
    }
    if ((fp2 = fopen("chorus.out", "w")) == NULL)
    {
       printf("不能打开文件!\n");
       exit();
    }
    printf(); //减去要保留的人数,就得到出列人数
    fprintf(fp2, );
    fclose(fp2);
    getch();
    ;
 }

9.2 NOIP提高组试题精解(2)的更多相关文章

  1. 9.2 NOIP提高组试题精解(1)

    9-16 poise.c #include <stdio.h> #define MAXN 1001 int main() { ], flag[MAXN] = { }; //保存6种砝码的数 ...

  2. 9.1 NOIP普及组试题精解(2)

    9-4 soldier.c #include <stdio.h> #define MAXN 21 }; int n, m, x, y; //n,m为B点的行列坐标位置,x,y为马的坐标位置 ...

  3. 9.1 NOIP普及组试题精解(3)

    9-6 seat.c #include <stdio.h> #define MAXN 1001 void swap(int *a, int *b) //交换数据 { int t; t = ...

  4. 9.1 NOIP普及组试题精解(1)

    9-1 series1.c #include <stdio.h> int main() { float s=0.0,k; int n; printf("输入数字k(1~15):& ...

  5. noip2010初赛提高组 试题详解

    转载自:https://blog.csdn.net/eirlys_north/article/details/52889970 一.单项选择题 1.与16进制数 A1.2等值的10进制数是 ( ) A ...

  6. noip2011初赛提高组 试题详解

    转载自:https://blog.csdn.net/Eirlys_North/article/details/52889993 一.单项选择题(共20题,每题1.5分,共计30分,每题有且仅有一个正确 ...

  7. NOIP提高组2004 合并果子题解

    NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...

  8. NOIP提高组初赛难题总结

    NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...

  9. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

随机推荐

  1. unity3D中使用Socket进行数据通信(一)

    公司今年3D产品的工作中心主要集中在提高产品深度上,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network能够搞定,后台部分前段时间主要研究了下Sq ...

  2. 一个免费的API-手机号码归属地接口

    手机号码归属地接口:根据手机号码或手机号码的前7位,查询手机号码归属地信息,包括省份 .城市.区号.邮编.运营商和卡类型. 接口文档:https://www.juhe.cn/docs/api/id/1 ...

  3. java查看工具jmap-windows

    Prints shared object memory maps or heap memory details for a process, core file, or remote debug se ...

  4. 【Excle】Excle中的逆向查询

    一般vlookup使用 一般的vlookup使用,想必都会了,下面是一个一般vlookup的例子 意思就是以F2为查询值,区域A2:D10为查找区域,在首列中找到与F2单元格相同的工号,然后返回这个区 ...

  5. 解决:cannot execute binary file

    linux系统下遇到cannot execute binary file的问题,一般由以下情况造成: 非root用户或者无执行权限 编译环境不同(程序由其他操作环境复制过来) 对于第一种情况,采用增加 ...

  6. PowerDesigner将PDM导出生成WORD文档(转)

    今天的温习老知识,是如何将一个PD设计的PDM来导出WORD文档,这是一个非常实用的功能,可以在软件过程的数据库设计文档编写中节省N多时间, 那不废话了,我们就开始今天的讲解吧! 第一步,点击Repo ...

  7. Android 开源项目精选

    0x00  leakcanary [内存泄漏检测] Leakcanary : A memory leak detection library for Android and Java. 良心企业Squ ...

  8. 研发团队如何借助Gitlab来做代码review

    代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现有工具在团队内部形成代码revie ...

  9. Minify把CSS和JS压缩和削减

    Minify把CSS和JS压缩和削减(Minify:去掉空格回车符等),以及把多个CSS,JS文件整合到一个文件里.不要以为你的大带宽没有必要进行这类优化.使用它的理由更重要的是文件合并,而不是压缩, ...

  10. Android----SharedPreferences(存储数据)

    SharedPreferences详解 我们在开发软件的时候,常需要向用户提供软件参数设置功能,例如我们常用的微信,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是在windo ...