zoukankan      html  css  js  c++  java
  • Soldier and Badges

    题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=173144

    题意:

        输入n个数,要使这n个数都不相同,且只能加,输出最少要加的多少。

        案例:

      1)input

        4

        1 3 1 4

        output

        1

     2)input

        5

        1 2 3 2 5

        output

        2

    思路分析:

        利用插空法。尽量减少循环。

        先对数组进行排序,再找出有x个相同的数,且把相同的数存在另一个数组c中。因为这个数组c也是排序的,所以只要找出x个比c大的缺少的数。

        最后,只要加上所有数组b中的数减去数组c中的数,就是所要输出的数。

    源代码如下:

     1 #include<iostream>
     2 #include<algorithm>
     3 #define max 3000
     4 using namespace std;
     5 int main()
     6 {
     7     int n,a[max],i,count=0,j=0,k,b[max],c[max],x=0;
     8     cin>>n;
     9     for(i=0;i<n;i++)
    10         cin>>a[i];
    11     sort(a,a+n);
    12     k=a[0];
    13     for(i=0;i<n;i++)
    14         if(a[i]==a[i+1])
    15         {
    16             c[x]=a[i];
    17             x++;
    18         }
    19     while(1)
    20     {    
    21         for(i=j;i<n;i++)
    22             if(k==a[i])
    23                break;
    24         if(i>=n)
    25             if(k>c[j])
    26             {
    27                 b[j]=k;
    28                 j++;
    29             }
    30         if(j>=x)
    31             break;
    32         k++;
    33     }
    34     for(i=0;i<x;i++)
    35         count+=b[i]-c[i];
    36     cout<<count<<endl;
    37     return 0;
    38 }
  • 相关阅读:
    crontab
    待重写
    待重写
    多套开发资源使用情况
    待重写
    待重写
    待重写
    docker安装es
    docker run启动时目录映射研究
    rabbitmq第二篇:使用插件实现延迟功能
  • 原文地址:https://www.cnblogs.com/q-c-y/p/4655804.html
Copyright © 2011-2022 走看看