曾彪彪的个人网站
首页
文章列表
>>
文章详情
一道语句解析题的优化
作者:
曾彪彪
日期:
2025-06-19 02:19:14
阅读(65)
分类:
Algorithm
# P1597 语句解析 ## 题目背景 木有背景…… ## 题目描述 一串长度不超过 $255$ 的 PASCAL 语言代码,只有 $a,b,c$ 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 `[变量]:=[变量或一位整数];`。未赋值的变量值为 $0$ 输出 $a,b,c$ 的值。 ## 输入格式 一串符合语法的 PASCAL 语言,只有 $a,b,c$ 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 $0$。 ## 输出格式 输出 $a,b,c$ 最终的值。 ## 输入输出样例 #1 ### 输入 #1 ``` a:=3;b:=4;c:=5; ``` ### 输出 #1 ``` 3 4 5 ``` ## 说明/提示 输入的 PASCAL 语言长度不超过 $255$。 我第一次写的代码,使用map,代码如下: ``` c++ /** start time: 9:15 end time: 9:30 first submit score: cause: test case: - a:=3;b:=4;c:=5; - a:=3; - a:=3;b:=4;c:=5;a:=c;c:=b; - a:=3;b:=4;c:=5;a:=c;c:=b;b:=a; - a:=3;b:=4;c:=5;a:=c;c:=b;a:=1;b:=2;c:=3; - a:=3;a:=4;a:=5;c:=a;a:=b;b:=c; - - - **/ #include <bits/stdc++.h> using namespace std; void printAns(char c, unordered_map<char, char> &ans) { if (ans.find(c) != ans.end()) { cout << ans[c] << " "; } else { cout << 0 << " "; } } int main() { string str; cin >> str; unordered_map<char, char> ans; int pos = 0; while (pos < str.size()) { char k = str[pos]; pos += 3; char v = str[pos]; if (ans.find(v) != ans.end()) { ans[k] = ans[v]; // when a variable was assigned another variable } else { if (v >= 'a' && v <= 'c') { v = '0'; // when the varible is not assigned a value } ans[k] = v; } pos += 2; } printAns('a', ans); printAns('b', ans); printAns('c', ans); return 0; } ``` 后来读别人代码,发现使用数组更佳,减少判断和代码量。 ``` c++ /** start time: 9:15 end time: 9:30 first submit score: cause: test case: - a:=3;b:=4;c:=5; - a:=3; - a:=3;b:=4;c:=5;a:=c;c:=b; - a:=3;b:=4;c:=5;a:=c;c:=b;b:=a; - a:=3;b:=4;c:=5;a:=c;c:=b;a:=1;b:=2;c:=3; - a:=3;a:=4;a:=5;c:=a;a:=b;b:=c; - - - **/ #include <bits/stdc++.h> using namespace std; int main() { string str; cin >> str; vector<char> ans(3, '0'); int pos = 0; while (pos < str.size()) { char k = str[pos]; pos += 3; char v = str[pos]; if (v >= 'a' && v <= 'c') { ans[k - 'a'] = ans[v - 'a']; } else { ans[k - 'a'] = v; } pos += 2; } cout << ans[0] << " " << ans[1] << " " << ans[2]; return 0; } ```
评论(0)
评论(必填)
名称(必填)
联系方式(可选)
验证码(必填)
提交
评论(必填)
名称(必填)
联系方式(可选)
验证码(必填)