Soldier and Badges

5331 단어 IE
제목 링크: 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 도 정렬 되 어 있 기 때문에 c 보다 큰 x 개의 부족 한 수 를 찾 으 면 됩 니 다.
    마지막 으로 모든 배열 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 }

좋은 웹페이지 즐겨찾기