浙江工商大学2020年新生赛部分题解(一)
浙江工商大学2020年新生赛部分题解(三)
【本人的代码风格比较特殊,所以所有代码只提供了核心部分,不提供头文件、命名空间、main函数的部分,各位只需要参考逻辑即可】
站神与最简单的语言
吐槽
这题是我出的题
这道题的题面完全是从Wikipedia上复制粘贴过来的,我给个截图给大家比对一下
这是题面

这是Wikipedia上的内容

(是不是发现了一种全新的出题方式)
这道题当时被评定为倒数第二难的题(也就是除了防AK题中最难的那道题)
后台的数据其实也很简单,其实都是这个网站帮忙生成的,导致其实后台数据挺弱的
题解
回到题面,大致意思是让你实现一个BrainFuck语言的编译器
为了照顾新生,我特意去掉下面几种特殊的情况:
- 存在死循环
- 存在括号嵌套(新生可以考虑一下怎么做)
- 不需要考虑输入
- 不需要考虑括号是否合法
是不是突然感觉学长对你们还是很好的
然后为了加大一下难度(其实并没有),增加了一些特殊条件的判断
这道题最难的地方,我觉得应该是两点
- 如何处理循环
- 如何处理出现程序错误时的问题
由于没有括号的嵌套,我们只需要记录下上一个[所在的位置,当我们遇到]的时候,直接转跳到上一个保存的位置即可。因为括号的匹配必定合法
第二个问题,其实最方便的解法就是在输出错误信息后,使用exit(0);或者return 0;直接结束程序就行
最后实际交的代码数量也不多,也算是符合最难的题的预期
AC code
void solve() {
vector<char> data(1, 0);
int pos = 0;
int cnt = 0;
string str;
cin >> str;
int miss = 0;
for (int i = 0; i < str.size(); ++i) {
if (miss == -1) {
if (str[i] == ']') miss = 0;
continue;
}
if (cnt == 1000000) {
cout << "Endless Code" << endl;
return;
}
switch (str[i]) {
case '>':
pos<

&spm=1001.2101.3001.5002&articleId=111460449&d=1&t=3&u=da52ab90c5a6431782d1a7b6871f09a9)
983

被折叠的 条评论
为什么被折叠?



