Я не могу найти ошибку сегментации, которая происходит на линии, где я звоню calculate_grundy
в main
. Пожалуйста, помогите.
Я также добавил скриншот моего отладчика при отладке кода.
Это вопрос соревнований по бегу, поэтому, пожалуйста, не отвечайте на логические проблемы, а не помогите мне найти ошибку сегментации.
Я передаю карту dp
для хранения подзадач, как в динамическом программировании.
#include<bits/stdc++.h>
#define ll long long int
using namespace std;
ll calculate_mex(unordered_set<ll> Set)
{
ll mex = 0;
while(Set.find(mex)!=Set.end())
{
mex++;
}
return mex;
}
ll calculate_grundy(ll n,ll m,map<pair<ll,ll>,ll> &dp)
{
auto it = dp.find(make_pair(n,m));
if(it!=dp.end())
{
return it->second;
}
else
{
ll ans;
ll greater = max(n,m);
ll smaller = min(n,m);
if(n==m || m==0 || n==0)
{
return 0;
}
else if(n==1 || m==1)
{
return n==1?m:n;
}
unordered_set<ll> Set;
ll limit = greater%smaller;
for(ll i=1;i<=limit;i++)
{
ll mult = smaller*i;
Set.insert(calculate_grundy(greater-mult,smaller,dp));
}
ans = calculate_mex(Set);
dp.insert(make_pair(make_pair(n,m),ans));
return ans;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t;
cin>>t;
while(t--)
{
ll n,m;
cin>>n>>m;
map<pair<ll,ll>,ll> dp;
if(calculate_grundy(n,m,dp)==0)
{
cout<<"Ari"<<"\n";
}
else
{
cout<<"Rich"<<"\n";
}
}
}
* +1012 *