首页 > 编程语言 >UVA-1596 找bug 题解答案代码 算法竞赛入门经典第二版

UVA-1596 找bug 题解答案代码 算法竞赛入门经典第二版

时间:2023-03-07 11:01:13浏览次数:53  
标签:arr return string int 题解 1596 UVA line bug


​GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版​

AC代码

有个点需要注意:

ASCII中,在Z和a中间还有6个字符,因此数组开大一点比较好。

getValue有多种实现方式,栈,递归,数组都可以。

下面我用的是栈,最后我也列出了递归的做法。

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<stdlib.h>
#include<stack>
#define MAX 60
using namespace std;

struct Array {
int size;
map<int, int> mp;
};

Array arr[MAX];
int bug;

int getValue(string s) {
stack<int> st;
int a = 0, av = 0;
while(s.length()) {
if(s[0] >= 'A' && s[0] <= 'z') {
st.push(s[0] - 'A');
s = s.substr(2, s.length() - 3);
} else {
av = atoi(s.c_str());
break;
}
}
while(st.size()) {
a = st.top();
if(av >= arr[a].size || !arr[a].mp.count(av)) {
bug = 1;
return 0;
}
av = arr[a].mp[av];
st.pop();
}
return av;
}

void handleDecl(string line) {
Array a;
int i = line[0] - 'A';
if(i < 0 || i > MAX) {
bug = 1;
return;
}
line = line.substr(2, line.length() - 3);
int num = atoi(line.c_str());
a.size = num;
arr[i] = a;
}

void handlAssi(string line) {
int cut = line.find("=");
string front, after;
front = line.substr(0, cut);
after = line.substr(cut + 1);
int a1, v1, v2;
a1 = front[0] - 'A';
if(a1 < 0 || a1 > MAX) {
bug = 1;
return;
}
v1 = getValue(front.substr(2, front.length() - 3));
if(bug) {
return;
}
if(v1 >= arr[a1].size) {
bug = 1;
return;
}
v2 = getValue(after);
if(bug) {
return;
}
arr[a1].mp[v1] = v2;
}

void handleLine(string line) {
int pos = line.find("=");
if(pos < 0) {
handleDecl(line);
} else {
handlAssi(line);
}
}


int main() {
string line;
int i, j, k, lineNum;
while(getline(cin, line) && line != ".") {
for(i = 0; i < MAX; ++i) {
arr[i].size = 0;
arr[i].mp.clear();
}
bug = 0;
lineNum = 1;
handleLine(line);
while(getline(cin, line) && line != ".") {
if(!bug) {
++lineNum;
handleLine(line);
}
}
if(!bug) {
lineNum = 0;
}
cout << lineNum << endl;
}
return 0;
}

递归的做法

int getValue(string s) {
char first = s[0];
if(first >= 'A' && first <= 'z') {
int a = first - 'A';
string sChild = s.substr(2, s.length() - 3);
int ai = getValue(sChild);
if(bug) {
return 0;
}
if(ai >= arr[a].size) {
bug = 1;
return 0;
}
if(!arr[a].mp.count(ai)) {
bug = 1;
return 0;
}
return arr[a].mp[ai];
} else {
return atoi(s.c_str());
}
}

标签:arr,return,string,int,题解,1596,UVA,line,bug
From: https://blog.51cto.com/u_15995687/6105509

相关文章

  • UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​AC代码有意思的一个题目。书上说这是一个不错的优先队列练习题,但实际上它其实是......
  • PAT 乙级 1014 题解 (Basic Level) Practice
    很简单的一道题,我的程序有点乱#include<stdio.h>#include<string.h>#include<ctype.h>intmain(){chars1[61];chars2[61];chars3[61];chars4[61];s......
  • [CF1648D]Serious Business 题解
    [CF1648D]SeriousBusiness题解首先容易想到一个\(dp\)转移式子:\[dp_{i}=\max_{j\lei}s_{1,j}-cost_{j,i}-s_{2,j-1}+s_{2,i}+s_{3,n}-s_{3,i-1}\]其中\(dp_i\)......
  • NOI2023春测题解
    NOI2023春测题解目录NOI2023春测题解更好的阅读体验戳此进入游记戳此进入T1LG-P9117[春季测试2023]涂色游戏题面SolutionCodeT2LG-P9118[春季测试2023]幂次题面So......
  • 春季测试2023全题解
    T1涂色游戏非常困难的题目,我们需要记录每一行/每一列最后一次被修改的时间以及被修改成什么颜色。输出的时候每一个格子是受行影响还是列影响即可。复杂度\(O(nm)\)。......
  • [SDOI2019] 移动金币 题解
    首先考虑一个状态什么时候是合法的。不难把游戏过程抽象为阶梯Nim博弈。根据阶梯Nim博弈的结论,先手必胜当且仅当奇数位上的异或和不为0。考虑将本题中每个棋子后面......
  • AcWing 4490. 染色题解
    题目描述样例输入:612215211111输出3算法描述思路我们以样例为例讲讲思路。如何确保dfs能顺利便利呢,我们可以使用链式前向星来存图(树)C++代......
  • AcWing 4495. 数组操作题解
    思路此题较为简单,简述一下思路。从小到大排序,每次选取最小值,只要不为0即可每次都为序列减去一个数字太慢,但每个数又减去的数字一样,所以可以用minus记录每个数要减去的数......
  • 3.2 L5-NOIP训练29 测试题解
    3.2L5-NOIP训练29测试题解码创Contest#530(出题人写中文也要句句都打分号吗!!)A.老司机的压缩包(数论)题面老司机最近得到了一个奇怪的压缩包,听说里面有十分厉害的东西......
  • 3 月 1 日测试题解
    3月1日测试题解T1题意给你一个\(n\timesm\)的01矩形,求一个面积最大的不包含数字1的矩形。\(n,m\le1000\)。思路首先,这道题的数据水到了什么程度呢?\(O(n......