zoukankan      html  css  js  c++  java
  • CodeForce 137B

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

    Description

    "Hey, it's homework time" — thought Polycarpus and of course he started with his favourite subject, IT. Polycarpus managed to solve all tasks but for the last one in 20 minutes. However, as he failed to solve the last task after some considerable time, the boy asked you to help him.

    The sequence of n integers is called a permutation if it contains all integers from 1 to n exactly once.

    You are given an arbitrary sequence a1, a2, ..., an containing n integers. Each integer is not less than 1 and not greater than 5000. Determine what minimum number of elements Polycarpus needs to change to get a permutation (he should not delete or add numbers). In a single change he can modify any single sequence element (i. e. replace it with another integer).

    Input

    The first line of the input data contains an integer n (1 ≤ n ≤ 5000) which represents how many numbers are in the sequence. The second line contains a sequence of integers ai (1 ≤ ai ≤ 5000, 1 ≤ i ≤ n).

    Output

    Print the only number — the minimum number of changes needed to get the permutation.

    Sample Input

    Input
    3
    3 1 2
    Output
    0
    Input
    2
    2 2
    Output
    1
    Input
    5
    5 3 3 3 1
    Output
    2

    Hint

    The first sample contains the permutation, which is why no replacements are required.

    In the second sample it is enough to replace the first element with the number 1 and that will make the sequence the needed permutation.

    In the third sample we can replace the second element with number 4 and the fourth element with number 2.

    这道题的题意是给出一个数n,再给出n个数,要求从1到n都要出现在这个数组中,可以改变任意一个数以达到这个状态,问最小需要几次。这个题需要注意的地方有,数组给的可能是乱序的 ,数组中可能有大于n的数,应该作为非法的数处理。

    #include<iostream>
     using namespace std;
     #include<algorithm>
     int a[5010];
     int main()
     {
         int num = 0,i,j = 0;
         cin >> num;
         for(i = 0;i < num;i++)
    {
    cin >> a[i]; } sort(a,a+num);//将数组排序便于统计 for(i = 0;i < num && a[i] <= num;i++)//统计小于num且不同的数 { if(a[i] == a[i+1])continue; else j++; } cout << num - j; return 0; }
  • 相关阅读:
    POJ1182
    poj3225 线段树区间操作 (见鬼)
    斜率优化dp(POJ1180 Uva1451)
    POJ2528 线段树的区间操作
    POI2001 Gold mine(二叉排序树 黑书经典)
    POJ3921
    博弈论之威佐夫博弈(转载)
    poj3468(线段树 边覆盖)
    hdu 1166(树状数组 或 线段树)
    压缩软件的改进--- (续先前霍夫曼编码)
  • 原文地址:https://www.cnblogs.com/lwy-kitty/p/3194219.html
Copyright © 2011-2022 走看看