#include<bits/stdc++.h>#include<unordered_map>usingnamespace std;typedeflonglong ll;classSolution{public:intmyAtoi(string str){
Automation automation;for(char c : str)
automation.get(c);return automation.ans * automation.sign;}private:classAutomation{private:
string state ="start";
unordered_map<string, vector<string>> table ={{"start",{"start","signed","in_number","end"}},{"signed",{"end","end","in_number","end"}},{"in_number",{"end","end","in_number","end"}},{"end",{"end","end","end","end"}}};intget_col(char c){if(isspace(c))return0;if(c =='+'|| c =='-')return1;if(isdigit(c))return2;return3;}public:int sign =1;
ll ans =0;voidget(char c){
state = table[state][get_col(c)];if(state =="in_number"){
ans = ans *10+ c -'0';
ans = sign ==1?min(ans,(ll)INT_MAX):min(ans,-(ll)INT_MIN);}elseif(state =="signed"){
sign = c =='+'?1:-1;}}};};