C++ map(long-long-int,long-long-int)不适用于键=1000 000 000 000(在long-long-int范围内)
最近我问了一个问题,但是关于引起这个问题的递归 注意->计数该函数返回键K出现在映射容器中的次数。如果容器中存在密钥,则返回1,因为映射仅包含唯一密钥。如果映射容器中不存在密钥,则返回0。 它几乎通过了所有的测试用例,但却失败了100万次 根据long-long-int-range值,它也应该通过这个值,但是它给出了 一些负值作为输出; 我认为这就是容器映射的问题 谁能帮我一下地图怎么了C++ map(long-long-int,long-long-int)不适用于键=1000 000 000 000(在long-long-int范围内),c++,recursion,C++,Recursion,最近我问了一个问题,但是关于引起这个问题的递归 注意->计数该函数返回键K出现在映射容器中的次数。如果容器中存在密钥,则返回1,因为映射仅包含唯一密钥。如果映射容器中不存在密钥,则返回0。 它几乎通过了所有的测试用例,但却失败了100万次 根据long-long-int-range值,它也应该通过这个值,但是它给出了 一些负值作为输出; 我认为这就是容器映射的问题 谁能帮我一下地图怎么了 #include<bits/stdc++.h> using namespace
#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;
}
}
问题是函数交换-它返回int,这是比long-long-int更窄的类型。首先,这是错误的:include 如果需要地图,请使用:
#include <map>
然后对于类型,如果您需要存储超过20亿的内容,请使用您可以确保能够保存的类型,尤其是对于返回类型!:
#include <iostream>
#include <map>
int64_t exchange(std::map& <int64_t, int64_t>, int64_t 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(){
std::map <int64_t, int64_t> dp;
while(1){
int64_t n;
std::cin>>n;
std::cout<<exchange(dp, n)<<std::endl;
}
}
使用find代替count;OT提示:永远不要使用,这是非标准的包含我想这是默认的标题,包含该实践站点中的所有内容是的,这很糟糕: