Ciao a tutti, ho bisogno di aiuto per risolvere il problema Simple Calculator.
sto ricevendo nei task 16-24-35-37 Checker error. cosa significa?
Grazie mille in anticipo!
Ciao a tutti, ho bisogno di aiuto per risolvere il problema Simple Calculator.
sto ricevendo nei task 16-24-35-37 Checker error. cosa significa?
Grazie mille in anticipo!
ecco il codice della mia sottoposizione:
#include <bits/stdc++.h>
using namespace std;
struct Dt { int a,b; char op; };
void hp(unordered_map<int, Dt>& mem, set<int>& dp, int n, Dt op) {
if(mem.find(n) != mem.end()) return;
mem[n] = op;
dp.insert(n);
}
string pr(int N, unordered_map<int, Dt>& c) {
//cout<<"dba "<<N<<endl;
if (N == 1) return "1";
Dt cu = c[N];
string op(1, cu.op);
if (cu.op == '<') op = "<<";
if (cu.op == '>') op = ">>";
//cout<<"db: "<<cu.a<<" "<<cu.op<<"\_"<<op<<" "<<cu.b<<endl;
return "(" + pr(cu.a, c) + op + pr(cu.b, c) + ")";
}
int main() {
int M;
cin >> M;
unordered_map<int, Dt> mem;
vector<set<int>> dp(1);
dp[0].insert(1);
int i = 1;
while(mem.find(M) == mem.end()) {
set<int> cur;
for(int n = 0; n < i; n++) {
for(auto it = dp[n].begin(); it != dp[n].end(); it++) {
int ne = i - n - 1;
for(auto ite = dp[ne].begin(); ite != dp[ne].end(); ite++) {
int v1 = (*it);
int v2 = (*ite);
//cout<<"DB: "<<v1<<" "<<v2<<endl;
hp(mem, cur, v1 + v2, {v1, v2, '+'});
hp(mem, cur, v1 - v2, {v1, v2, '-'});
hp(mem, cur, v1 * v2, {v1, v2, '*'});
if (v2 > 0) hp(mem, cur, v1 / v2, {v1, v2, '/'});
if (v2 > 0) hp(mem, cur, v1 % v2, {v1, v2, '%'});
hp(mem, cur, v1 << v2, {v1, v2, '<'});
hp(mem, cur, v1 >> v2, {v1, v2, '>'});
hp(mem, cur, v1 ^ v2, {v1, v2, '^'});
hp(mem, cur, v1 | v2, {v1, v2, '|'});
hp(mem, cur, v1 & v2, {v1, v2, '&'});
}
}
}
dp.push_back(cur);i++;
}
//cout<<"l: "<<i<<endl;
cout << pr(M, mem) << endl;
return 0;
}
Ciao, intanto mi sono permesso di togliere un paio di caratteri extra dal tuo codice che lo rendevano non valido.
Il motivo è semplicemente che il checker è buggato: ogni qual volta una sottoespressione abbia come risultato un numero negativo interpreta il segno meno come operatore e si rompe.
Adesso penso a come aggiustare. Grazie per la segnalazione.