zoukankan      html  css  js  c++  java
  • 支配值数目2012年12月25日

              刚才做的那道题比较简单,再做一道。

              问题描述:已知f[]与g[]两个整数数组,元素都已经从小到大排列,请写一个程序,算出f[]比g[]中元素大的对数。换句话说,f[0]比g[]中多少个元素大,f[1]比g[]中多少个元素大,等等,这些值的总和就是要求的答案。举个例子,如果f[]中有1,3,5,7,9,而g[]中有2,3,4,7,8,那么答案就是12。

              思路:这个题需要注意的地方就是,两个数组都是从小到大排序的,所以,如果f[1]都大于g[]中所有整数时,那么f[2],f[3]等等都会大于g[]中所有整数。下面是代码:

     1 #include <stdio.h>
     2 #define MAX 1000
     3 
     4 int f[]={1,3,5,7,9};
     5 int g[]={2,3,4,7,8};
     6 int len_f=sizeof(f)/sizeof(int);
     7 int len_g=sizeof(g)/sizeof(int);
     8 int sum=0;
     9 void count();
    10 
    11 int main()
    12 {
    13     int result[MAX]={0};
    14     int i,j;
    15     int flag_i;
    16     for(i=0,j=0;i<len_f&&j<=len_g;)
    17     {
    18         if(j==len_g)  //如果f[]中,从中间开始就都比g[]大,那么就加起来就可以了
    19         {
    20             sum+=result[i];
    21             for(j=i+1;j<len_f;j++) 
    22             {
    23                 result[j]=result[i]; 
    24                 sum+=result[j];
    25             }
    26             break;
    27         }
    28         if(i!=0 && flag_i==1)
    29         {
    30             result[i]+=result[i-1];
    31             flag_i=0;
    32         }
    33         if(f[i]>g[j]) 
    34         {    
    35             result[i]++;
    36             j++;
    37         }
    38         else
    39         {
    40             flag_i=1;
    41             sum+=result[i];
    42             i++;
    43         }
    44     }
    45     printf("sum is %d\n",sum);
    46     for(i=0;i<len_f;i++)
    47         printf("%d ",result[i]);
    48     printf("\n");
    49 }

            

             下面是从资料上找到的另外一种方法,代码非常少。思路与我的很相似,也是因为两个数组都从小到大排序好了,那么,当f[i]>g[j],那么,在f中就一定有len_f-i个元素大于g[j]了。

      

     1 void count()
     2 {
     3     int i=0,j=0;
     4     while(i<len_f && j<len_g)
     5     {
     6         if(f[i]<=g[j]) 
     7             i++;
     8         else
     9             sum+=len_f-i,j++; 
    10     }
    11 }

             如果您觉得我的文章对您有帮助,请推荐一下,非常感谢。

  • 相关阅读:
    noip2015运输计划
    bzoj3595 方伯伯的oj
    noip模拟赛 #3
    圆方树
    AtCoder AGC #4 Virtual Participation
    noip模拟赛 #2
    AtCoder AGC #3 Virtual Participation
    UNR #1 火车管理
    noip模拟赛
    AtCoder AGC #2 Virtual Participation
  • 原文地址:https://www.cnblogs.com/NeilHappy/p/2832501.html
Copyright © 2011-2022 走看看