22睿抗省赛真题
跑团机器人
5865. 跑团机器人 - AcWing题库
根据加法和减法拆分字符串
知识点
1、字符串转数字
num1 = stoi(Str)
2、unordered_map转换成vector后再进行排序
unordered_map<int,int> toumap;
vector<pair<int,int>> vec(toumap.begin(), toumap.end());
3、在字符串里找某个字符
auto position = str.find('d');
if(position == str::npos){
//代表没找到
}
完整代码
#include <bits/stdc++.h>
using namespace std;unordered_map<int,int> toumap;vector<char> vecChar;
vector<vector<int>> calVec(100000); //【0】为min, 【1】为max
int cnt=0;void calNum(string str){int num1=0, num2=0;auto position = str.find('d');if(position == string::npos){//单个数字num1 = stoi(str);num2=num1;calVec[cnt].push_back(num1);calVec[cnt].push_back(num1);}else{if(position==0){num1=1;num2=stoi(str.substr(1,str.length()-1));}else{num1 = stoi(str.substr(0,position));num2 = stoi(str.substr(position+1, str.length()-position-1));
// cout << position << endl;}toumap[num2]+=num1;calVec[cnt].push_back(num1);calVec[cnt].push_back(num2*num1);}cnt++;// cout << num1 << " " << num2 << endl;//num1个num2面
}int main(){string s;cin >> s;int len = s.length();int start=0;for(int i=0;i<len;i++){if(s[i]=='+' || s[i]=='-' || i==len-1){if(s[i]=='+'||s[i]=='-'){vecChar.push_back(s[i]); //符号压栈 }string tem;if(i!=len-1){tem = s.substr(start, i-start);}else{tem = s.substr(start, i-start+1);}
// cout << tem << endl;calNum(tem);start += i-start+1; //数组长度 }}vector<pair<int,int>> vec(toumap.begin(), toumap.end());//对vector进行排序
// sort(vec.begin(), vec.end(),[](const pair<int,int> &a, const pair<int,int> &b){
// return a.second<b.second;
// });sort(vec.begin(), vec.end());for(const auto& pair:vec){cout << pair.first << " " << pair.second << endl;}
// cout << endl;int numSize=cnt;int operSize=vecChar.size();
// cout << numSize << " " << operSize << endl;// for(int i=0;i<numSize;i++){
// cout << calVec[i][0] << " " << calVec[i][1] << endl;
// }long long minRe=0, maxRe=0;int k=1;minRe += calVec[0][0];maxRe += calVec[0][1];for(int i=0;i<operSize;i++){if(vecChar[i]=='+'){minRe += calVec[k][0];maxRe += calVec[k][1];}else if(vecChar[i]=='-'){minRe -= calVec[k][1];maxRe -= calVec[k][0];}k++;}cout << minRe << " " << maxRe;return 0;
}