陈博的完美主义

[b][color=red]问题:[/color][/b]在JOBDU团队里,陈博是最讲平均主义的人,对数字十分敏感。事实上,他还是个数字完美主义者。例如看到N个数字的时候,从1到N的每个数都需要在其中出现且仅出现一次,否则他就觉得这个数字序列不完美。后来,我明白了:这是排列!
对于一个整数序列d1, d2, d3 ... dn,你是否能够算出至少改变其中的几个数,才能把他们变成从1到N的一个排列?例如,对于整数序列 3, 2, 2,我们只需要将其中的一个2改为1就能得到一个从1到3的排列:3, 1, 2

输入:每个测试文件包含多个测试案例,每个测试案例两行,第一行包括一个整数N,代表整数序列的长度,第二行是以空格隔开的N个整数,代表该整数序列。其中我们能保证1 <= N <= 10^5,每个整数的长度不超过100.

输出:对于每个整数序列,输出一行,包含一个整数,表明至少要改变该整数序列的多少个数才能得到一个从1到N的排列。


实现代码:

#include <iostream>
#include <bitset>
#include <string>

using namespace std;

int main(int argc,char *argv[]){
int len,index;
unsigned long input_num,n,c,total;
string input;
bitset<100001> bs(0);
for(;cin>>n;){
for(c=0;c<n;++c){
cin>>input;
len=input.length();
if(len>6){
continue;
}else{
const char *num=input.c_str();
for(input_num=0,index=0;index<input.length();++index){
input_num=input_num*10+num[index]-'0';
}
if(input_num>100000) continue;
else bs[input_num]=1;
}
}
for(total=0,c=1;c<=n;++c){
if(bs[c]==0) ++total;
}
cout<<total<<endl;
bs.reset();
}
return 0;
}


运行结果:

[img]http://dl.iteye.com/upload/attachment/0064/4612/f105a68d-fdfa-3dee-907b-e40497da1724.jpg[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值