#include <iostream> #include <sstream> #include <set> #include <map> #include <queue> #include <cmath> #include <algorithm> #include <vector> #include <stdio.h> #include <string> using namespace std; bool cmp(int i, int j) { return i<j; } vector<double> BatchQueryExecutionTime (const vector<string>&sqls, const vector<double>×, const vector<string>&keywords) { vector<double> res; if(!sqls.size() || !times.size() || !keywords.size()) return res; vector< map<string, double> > mymaps(sqls.size()); int i = 0; for(auto &it : sqls) { string x = it; stringstream ss(x); while(ss>>x){ // x.erase(find(begin(x), end(x), '"')); mymaps[i][x] = times[i]; } ++i; } for(auto &it : keywords) { double sum = 0; int cnt = 0; for(auto &my_it : mymaps) { if(my_it[it]) { sum += my_it[it]; cnt++; } } if(cnt) res.push_back(sum/cnt); else res.push_back(0); } return res; } int main(void) { #ifdef LOCAL_PROJECT freopen ("input.txt", "r", stdin); //freopen("a.out","w",stdout); // console output is better (in most cases) #else // add i/o method of specific testing system #endif vector<string> sqls; sqls.push_back(" insert into tableA values (1, \"columnA\", \"columnB\")"); sqls.push_back(" insert into tableB values (2, \"columnA\", \"columnB\", \"columnC\")"); sqls.push_back("select columnA, columnC from tableB"); vector<double> times, res; times.push_back(2.5); times.push_back(12.5); times.push_back(30); vector<string> keywords; keywords.push_back("tableB"); keywords.push_back("insert"); keywords.push_back("select"); keywords.push_back("0"); keywords.push_back("table"); keywords.push_back("tableA"); res = BatchQueryExecutionTime(sqls, times, keywords); for(auto &it : res) cout<<it<<endl; return 0; }