【丢失的数字】遇到__i64和long long的坑


给出m个数字,请你找出1到n中没有出现在这m个数字中的数字个数。Input多组输入,每组输入第一行n和m,接下来一行m个数字a[i]。 
数据范围:1<=n,m<=100000,-1e9<=a[i]<=1e9。Output每组输出一行,表示丢失的数字的个数。Sample Input
5 3
1 3 4
4 6
1 3 8 3 11 12
Sample Output
2
2



这里其实是可以不用long long 长整型的,但是我为了保险,还是在代码里面加了长整型,但是这里却卡在了g++的编译规则上面,下面看两个代码,第一个是WA的,第二个是AC的,注意比较两个代码的不同:



#include<cstdio>
#include<map>
using namespace std;

int main(void)
{
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF){
		
		map<long long,int> mp;
		long long tmp;
		
		for(int i = 0 ; i < m ; ++i){
			
			scanf("%lld",&tmp);
			if(tmp>n||tmp<1) continue;
			if(mp.find(tmp)==mp.end()) mp[tmp]=i;
		}
		printf("%d\n",n-mp.size());
	}
	
	
	return 0;
 } 



#include<cstdio>
#include<map>
using namespace std;

int main(void)
{
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF){
		
		map<__int64,int> mp;
		__int64 tmp;
		
		for(int i = 0 ; i < m ; ++i){
			
			scanf("%I64d",&tmp);
			if(tmp>n||tmp<1) continue;
			if(mp.find(tmp)==mp.end()) mp[tmp]=i;
		}
		printf("%d\n",n-mp.size());
	}
	
	
	return 0;
 } 


第二个代码我只是将map中和tmp的long long 改成了__int64,输入lld改为 i64d,然后就AC了,至于原因,这个博客已经写的很详细了有兴趣的可以去看看  点击打开链接






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值