刷题打卡 4 UVA-1596

来源:互联网 发布:转发文章赚钱软件 编辑:程序博客网 时间:2024/05/20 06:24

题目 8

Bug hunt UVA-1596

https://cn.vjudge.net/problem/UVA-1596

思路和代码参考:http://blog.csdn.net/wangjinhaowjh/article/details/50540489#comments感谢(dalao)(我都不会呀委屈,看了好久看懂了点点)

#include<iostream>#include<cstring>#include<vector>#include<map>#include<cstdio>#include<cctype>#include<sstream>using namespace std;typedef long long ll;//将现有的数据类型起个新的别名。pair<char,ll>ha;//记录数组的下标及名称  map<char,ll>Count; //记录每个数组名的最大值map<pair<char,ll>,ll>num;//记录每个数组单元的值 string trans(string s){ //把中括号去掉char ss[10000];memset(ss,0,sizeof(ss));int i,j=0,len=s.length() ;for(i=0;i<s.length() ;i++){if(s[i]!='['&&s[i]!=']')ss[j++]=s[i];}ss[j]=0;string s1=ss;return s1;}ll get_count(string s){ //得到数组元素的值并判断int len=s.length() ,temp=0;string s1=s;for(int i=0;i<len;i++){char c=s[i];if(isalpha(c)) if(!Count.count(c)) return -1;   //没有定义的数组,直接返回if(isalpha(c)) s[i]=' ';if(isdigit(c)){//判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。 temp=i;break;}}stringstream ss(s);//stringstream是 C++ 提供的另一个字串型的串流(stream)物件 主要是用在將一個字串分割ll x;ss>>x;for(int i=temp-1;i>=0;i--){char c=s1[i];ha.first =c;ha.second =x;if(!num.count(ha)) return -1;//count其功能是在序列中查找等于某个给定值的元素的个数x=num[ha];}return x;}int main(){string s;int  i,j,k;vector<string>code;while(cin>>s&&s[0]!='.'){Count.clear() ;//clear清空字符串num.clear() ;code.clear() ;code.push_back(trans(s));int yes=1;while(cin>>s&&s[0]!='.')code.push_back(trans(s));int len=code.size() ;for(i=0;i<len;i++){k=code[i].find('=');if(k==std::string::npos ){string s1=code[i].substr(1);char c=code[i][0];ll x=get_count(s1);if(x==-1){cout<<i+1<<endl;yes=0;break;}Count[c]=x;}else{string s1=code[i].substr(1,k-1);string s2=code[i].substr(k+1);char c=code[i][0];ll x=get_count(s1),y=get_count(s2);if(!Count.count(c)||x==-1||y==-1||x>=Count[c] ){cout<<i+1<<endl;yes=0;break;}ha.first=c;ha.second=x;num[ha]=y;}} if(yes==1)cout<<"0\n";}return 0;}





————越努力,越幸运BYyingying




原创粉丝点击