• HDU 1082 Matrix Chain Multiplication


     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <map>
     5 #include <string>
     6 
     7 using namespace std;
     8 
     9 struct matrix{
    10     int row,col;
    11 };
    12 
    13 int main(){
    14     int n;
    15     cin >>n;
    16     map<string,matrix> a;
    17     for(int i = 0;i < n; i ++ ){
    18         string name;
    19         int r,c;
    20         cin>>name>>r>>c;
    21         matrix tmpm;
    22         tmpm.row = r;
    23         tmpm.col = c;
    24         a.insert(pair<string,matrix>(name,tmpm));
    25     }
    26     vector<string> ebnf;
    27     string tmp;
    28     while(cin >>tmp) ebnf.push_back(tmp);
    29 
    30     for(int i = 0; i < ebnf.size(); i ++ ){
    31         vector<string> sstack;
    32         int cnt = 0;
    33         bool error = false;
    34         for(int j = 0; j < ebnf[i].length(); j ++ ){
    35             if(ebnf[i][j] == '(') continue;
    36             else if(ebnf[i][j] != ')') {
    37                 string tmp = "";
    38                 tmp +=ebnf[i][j];
    39                 sstack.push_back( tmp);
    40             }
    41             else{
    42                 int idx = sstack.size()-1;
    43                 if( a[sstack[idx-1]].col != a[sstack[idx]].row ) { error = true; break;}
    44                 cnt += a[sstack[idx-1]].row*a[sstack[idx-1]].col*a[sstack[idx]].col;
    45                 string newName = sstack[idx-1]+sstack[idx];
    46                 int newRow = a[sstack[idx-1]].row, newCol = a[sstack[idx]].col;
    47 
    48                 matrix tmpm;
    49                 tmpm.row = newRow;
    50                 tmpm.col = newCol;
    51 
    52                 a.insert( pair<string,matrix>( newName,tmpm) );
    53                 sstack.pop_back();sstack.pop_back();
    54                 sstack.push_back(newName);
    55             }
    56         }
    57         if(error) cout<<"error"<<endl;
    58         else cout<<cnt<<endl;
    59         sstack.clear();
    60     }
    61     return 0;
    62 }

    第一次在codeforces上能编译通过,但提交时报 

          error C2678: 二进制“>>”: 没有找到接受“std::istream”类型的左操作数的运算符(或没有可接受的转换)

    结果是因为没有加#include <string> 

    当再次用codeforces编译时仍能通过,但提交时报错

    a.insert(pair<string,matrix>(name,{t,c}));//不能通过
    利用了个临时变量将其改为
            matrix tmpm;
            tmpm.row = r;
            tmpm.col = c;
            a.insert(pair<string,matrix>(name,tmpm));
    
    
    
     
     
  • 相关阅读:
    ccf-csp201909题解
    TYUT程序设计入门第四讲练习题题解--数论入门
    Pairs Forming LCM (LightOJ
    Help Hanzo (LightOJ
    hnsdfz -- 6.19 -- day4
    hsdfz -- 6.18 -- day3
    hsdfz -- 6.17 -- day2
    hsdfz -- 6.16 -- day1
    【BZOJ2555】SubString
    洋葱第4场C和D题解……
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3012576.html
Copyright © 2020-2023  润新知