輸入第一個字串並以vector紀錄
將vector以dim大小做排序
輸入第二個字串並比較是否存在相同之dim
將其做內積
輸出答案
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
void setVec();
int dot();
void quickSort(int left, int right);
void SWAP(int a, int b);
vector < vector<int> > vec;
int main()
{
setVec();
quickSort(0, vec.size()-1);
cout << dot() << endl;
return 0;
}
void setVec()
{
string str;
stringstream ss;
getline(cin, str);
ss.str(str);
int dim, num;
char sym;
while(ss >> dim , ss >> sym , ss >> num)
{
vector <int> Vtmp;
Vtmp.push_back(dim);
Vtmp.push_back(num);
vec.push_back(Vtmp);
}
vec.pop_back();
}
void quickSort(int left, int right)
{
if(left >= right) return;
int pivot, l, r;
pivot = vec[left][0];
l = left+1;
r = right;
while(true)
{
while(l < right)
{
if(vec[l][0] > pivot)
break;
l++;
}
while(r > left)
{
if(vec[r][0] < pivot)
break;
r--;
}
if(l >= r)
break;
SWAP(l, r);
}
SWAP(left, r);
quickSort(left, r - 1);
quickSort(r+1, right);
}
void SWAP(int a, int b)
{
swap(vec[a][0], vec[b][0]);
swap(vec[a][1], vec[b][1]);
}
int dot()
{
int ans = 0;
string str;
stringstream ss;
getline(cin, str);
ss.str(str);
int dim, num;
char sym;
while(ss >> dim , ss >> sym , ss >> num)
{
int i;
for(i = 0; i<vec.size() && dim > vec[i][0]; i++);
if(vec[i][0] == dim)
ans += num*vec[i][1];
}
return ans;
}
留言列表