map(long long int,long long int)不适用于键= 1000000000(在long long int范围内)

时间:2019-01-08 09:29:40

标签: c++ recursion

最近我问了一个问题,但是关于递归导致了这个问题

注意-> count()函数返回键K在地图容器中的出现次数。如果密钥存在于容器中,则返回1,因为映射仅包含唯一密钥。如果键在地图容器中不存在,则返回0。 它几乎通过了所有测试用例,但未通过1 000 000 000 根据long long int range值,它也应该通过这个 一些负值作为输出; 我认为这是容器映射的问题 谁能帮我解决地图的问题?

    #include<bits/stdc++.h>
    using namespace std;
    map <long long int,long long int> dp;
    int exchange(long long int n){
        if(n<12)
            return n;
        if(dp.count(n))
            return dp[n];
        return dp[n] = exchange(n/2)+exchange(n/3)+exchange(n/4);
    }
    int main(){
     //   int t;
       // cin>>t;
        while(1){
      //      memset(dp,-1,sizeof(dp));
            long long int n;
            cin>>n;
            cout<<exchange(n)<<endl;
        }

    }

2 个答案:

答案 0 :(得分:6)

问题出在函数exchange上-返回int,它是比long long int窄的类型。

答案 1 :(得分:4)

首先,这很糟糕:journalctrl 如果您需要地图,请使用:

#include<bits/stdc++.h>

然后关于类型,如果您需要存储超过20亿的东西,请使用一种可以确保可以容纳的类型(尤其是返回类型!):

#include <map>