算法竞赛入门经典 第二版 习题5-9 找bug Bug Hunt uva1596
来源:互联网 发布:淘宝改差评怎么改 编辑:程序博客网 时间:2024/06/02 00:30
题目:https://vjudge.net/problem/UVA-1596
思路:思路见代码,这里说明下各容器和函数的作用
map< char, int > arraysize;//由数组名到数组长度的映射
map< char, map< int, int > > arraydata;//由数组名到数组下标到数组元素的值的映射
int string_count(const string &s, char c)//统计字符串s中字符c出现的次数,这里用来数方括号的嵌套层数
bool is_beyond(char arrayname, int index)//判读数组下标是否越界
int getvalue(stringstream &ss, int layer)//本题的核心,计算形如a[b[c[1]]]的值,若运算过程中均合法,则返回该值,否则返回-1
int acase()//计算一组数据的答案并返回,若结束,返回-1
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <map>#include <string>#include <sstream>using namespace std;map<char, int> arraysize;//array, sizemap<char, map<int, int> > arraydata;//array,<index, value>int string_count(const string &s, char c){ int cot = 0; for(int i=0; i<s.size(); i++) { if(s[i]==c) { cot++; } } return cot;}bool is_beyond(char arrayname, int index)//判断越界{ if(arraysize.find(arrayname)==arraysize.end()||index<0||index>=arraysize[arrayname]) { return true; } return false;}int getvalue(stringstream &ss, int layer){ char arrayname[layer-1]; for(int i=0; i<layer-1; i++) { char temp; ss >> arrayname[i] >> temp; } int value; ss >> value; for(int i=layer-2; i>=0; i--) { if(is_beyond(arrayname[i], value)||arraydata[arrayname[i]].find(value)==arraydata[arrayname[i]].end()) { return -1; } value = arraydata[arrayname[i]][value]; } return value;}int acase(){ arraysize.clear(); arraydata.clear(); bool bug = false; string s; int bugrow = 0; for(int row = 1; ; row++) { getline(cin, s); if(s==".") { if(row==1) { return -1; } return bugrow; } int assignpos = s.find('=');//赋值号的下标值 if(assignpos==string::npos) { int layer = string_count(s, '['); stringstream ss; ss << s; char arrayname, temp; ss >> arrayname >> temp; int value = getvalue(ss, layer); if(value==-1) { if(!bug) { bugrow = row; } bug = true; } else { arraysize[arrayname] = value; } } else { string s1, s2; for(int i=0; i<assignpos; i++) { s1.push_back(s[i]); } stringstream ss; char arrayname, temp; ss << s1; ss >> arrayname >> temp; int layer = string_count(s1, '['); int index = getvalue(ss, layer); if(is_beyond(arrayname, index)) { index = -1; } for(int i=assignpos+1; i<s.size(); i++) { s2.push_back(s[i]); } layer = string_count(s2, '[')+1; stringstream sss; sss << s2; int value = getvalue(sss, layer); if(index==-1||value==-1) { if(!bug) { bugrow = row; } bug = true; } else { arraydata[arrayname][index] = value; } } }}int main(){ string s; while(1) { int ans = acase(); if(ans==-1) { break; } else { cout << ans << endl; } } return 0;}
0 0
- 算法竞赛入门经典 第二版 习题5-9 找bug Bug Hunt uva1596
- [刷题]算法竞赛入门经典(第2版) 5-9/UVa1596 - Bug Hunt
- 习题5-9 找bug(Bug Hunt, UVa1596)
- UVa1596 - Bug Hunt
- UVA1596 Bug Hunt
- 5-9 UVA 1596 Bug Hunt找BUG
- 算法竞赛入门经典第二章习题
- 算法竞赛入门经典习题 第二章
- 算法竞赛入门经典(第二版) 习题训练
- 【算法竞赛入门经典第二版学习】第三章习题
- 算法竞赛入门经典第二版第三章习题
- 算法竞赛入门经典(第二版) 习题
- 算法竞赛入门经典(第二版)第一章课后习题
- 算法竞赛入门经典 第二版 习题5-5 复合词 Compound Words uva10391
- 《算法竞赛入门经典(第二版)》第三章 习题(6-9)
- 算法竞赛入门经典 第二版 习题9-2 免费糖果 Free Candies uva10118
- 算法竞赛入门经典(第二版) 习题3-5 谜题(Puzzle) UVa227 Finals1993
- 《算法竞赛入门经典第二版》习题2-5分数化小数问题
- Python装numpy教程
- 实验吧 ctf 题目简单的sql注入2writeup
- python入门(一)
- 为什么做销售?
- Android 实战之酷云(一)
- 算法竞赛入门经典 第二版 习题5-9 找bug Bug Hunt uva1596
- 机器学习笔记(二) 线性模型
- bzoj4101[Usaco2015 Open]Trapped in the Haybales
- cocos2dx高级开发教程
- 基于二阶卡尔曼滤波的陀螺仪及加速度计信号融合的姿态角度测量
- Ubuntu根目录下各文件夹的作用
- Singleton 单例模式(懒汉方式和饿汉方式)
- 三月十日学习记录
- 基于android的Socket通信