Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) {
- vector<double> ans;
- vector<vector<double>> eq;
- unordered_map<string, int> nodeMp;
- int idx, idx1, loop, loopVal;
- idx=0;
- loopVal = 0;
- eq = vector<vector<double>>(max(equations.size(), queries.size())+1,vector<double>(max(equations.size(), queries.size())+1,-1));
- for(vector<string> cur : equations)
- {
- for(loop = 0; loop<2; loop++)
- {
- if(nodeMp.find(cur[loop]) == nodeMp.end())
- {
- nodeMp.insert(pair<string,int>(cur[loop], idx++));
- }
- }
- eq[nodeMp[cur[0]]][nodeMp[cur[1]]] = values[loopVal];
- eq[nodeMp[cur[1]]][nodeMp[cur[0]]] = 1.0/values[loopVal++];
- }
- for(idx1=0;idx1<idx;idx1++)
- {
- for(loop=0; loop<idx; loop++)
- {
- for(loopVal=0; loopVal<idx; loopVal++)
- {
- if(idx1==loopVal) eq[idx1][loopVal] = 1;
- else if(eq[idx1][loopVal] == -1.0)
- {
- eq[idx1][loopVal] = eq[idx1][loop] * eq[loop][loopVal];
- printf("%d %d %d %1.2f %1.2f %1.2f %1.2f\n", idx1, loopVal, loop, eq[idx1][loop], eq[loop][loopVal],eq[idx1][loopVal],eq[idx1][loop]*eq[loop][loopVal]);
- eq[idx1][loopVal] = eq[idx1][loopVal] < 0? -1.0 : eq[idx1][loopVal];
- }
- printf("%d %d %d %1.2f %1.2f %1.2f\n", idx1, loopVal, loop, eq[idx1][loop], eq[loop][loopVal],eq[idx1][loopVal]);
- }
- }
- }
- for(vector<string> cur : queries)
- {
- if(nodeMp.find(cur[0]) == nodeMp.end() || nodeMp.find(cur[1]) == nodeMp.end()) ans.push_back(-1.0);
- else ans.push_back(eq[nodeMp[cur[0]]][nodeMp[cur[1]]]);
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement