輸入第一個字串並以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;
}
 

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()