Submission #78742

#TimeUsernameProblemLanguageResultExecution timeMemory
78742PlurmTreasure (different grader from official contest) (CEOI13_treasure2)C++11
44 / 100
19 ms1240 KiB
#include <bits/stdc++.h> #include "treasure.h" using namespace std; int knownval[128][128]; class Hasher{ public: const size_t operator()(const tuple<int,int,int,int>& x) const{ return get<0>(x) + get<1>(x) + get<2>(x) + get<3>(x); } }; unordered_map<tuple<int,int,int,int>,int,Hasher> cache; int n; int getval(int a,int b,int c,int d){ if(a > c || b > d || a == 0 || b == 0 || c == 0 || d == 0 || a == n+1 || b == n+1 || c == n+1 || d == n+1) return 0; if(cache.find(make_tuple(a,b,c,d)) == cache.end()){ int res = countTreasure(a,b,c,d); cache[make_tuple(a,b,c,d)] = res; return res; }else{ return cache[make_tuple(a,b,c,d)]; } } int dp[128][128]; void findTreasure(int N){ memset(knownval,-1,sizeof(knownval)); n = N; for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ knownval[i][j] = getval(1,1,n,n) - (dp[i-1][j] + getval(1,j+1,n,n) - getval(i+1,j+1,n,n) + getval(i,1,n,n) - getval(i,j,n,n) + getval(i+1,j,n,n)); dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + knownval[i][j]; } } for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ if(knownval[i][j] == 1){ Report(i,j); } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...