Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- string str[15];
- string v[1005][5];
- char litmM(char ad)
- {
- if(!(ad>='a'&&ad<='z'))return ad;
- return ad-'a'+'A';
- }
- int max1(int a,int b)
- {
- if(a<b)return b;
- return a;
- }
- string stmM(string s)
- {
- int n=s.size(),i;
- string str1;
- for(i=0;i<n;i++)
- {
- str1+=litmM(s[i]);
- }
- return str1;
- }
- int valori[500];
- int main()
- {
- ifstream cin("a.in");
- ofstream cout("a.out");
- str[1]="PRINT";str[2]="LOAD";str[3]="MULT";str[4]="SUB";str[5]="DIV";
- str[6]="STORE";str[7]="ADD";str[8]="BG";str[9]="BE";str[10]="BL";str[11]="BU";
- str[12]="READ";str[13]="DC";str[14]="END";
- map<string,int>mp;
- int cnt=1,l2=0;
- int r[5];
- r[1]=r[2]=r[3]=0;
- string m;
- int el=1;
- int nr=0;
- int k=0;
- getline(cin,m);
- k=m.size();
- for(int i=0;i<k;i++)
- {
- ++l2;
- int semn=1;
- if(m[i]==' ')continue;
- if(m[i]=='-'){semn=-1;++i;}
- while(m[i]>='0'&&m[i]<='9')
- {
- valori[l2]=valori[l2]*10+m[i]-'0';
- i++;
- }
- valori[l2]*=semn;
- }
- cout<<"STOP"<<endl;
- while(getline(cin,m))
- {
- if(m[0]==NULL)break;
- stringstream is(m);
- string word;
- while(is>>word)
- {
- if(word.size()>0&&word[0]==' ')continue;
- //cout<<word<<endl;
- if(el==2)
- {
- r[2]=max1(r[2],word.size());
- el=3;
- //cout<<word<<endl;
- v[cnt][2]=stmM(word);
- //cout<<v[cnt][2]<<endl;
- }
- else
- if(el==3) {
- r[3]=max1(r[3],word.size());
- el=1;
- v[cnt][3]=word;++cnt;
- }
- else
- if(el==1)
- {
- ++el;
- if(mp.find(word)!=mp.end())
- {
- r[1]=max1(r[1],word.size());
- v[cnt][1]=word;
- }else
- {
- string l("");
- l=stmM(word);
- int ok=0;
- for(int i=1;i<=14;i++)
- {
- if(l==str[i])
- {
- ok=1;
- break;
- }
- }
- if(ok==1)
- {
- r[2]=max1(r[2],word.size());
- el=3;
- // cout<<word<<endl;
- v[cnt][2]=stmM(word);
- if(stmM(word)=="END")
- {
- el=1;
- ++cnt;
- continue;
- }
- //cout<<v[cnt][2]<<endl;
- }
- else
- {
- r[1]=max1(r[1],word.size());
- v[cnt][1]=word;
- mp[word]=1;
- }
- }
- }
- }
- //if(word.size()>0&&word[0]!=' ')cout<<word<<endl;
- }
- cout<<cnt<<endl;
- for(int i=1;i<=cnt;i++)
- {
- cout<<v[i][1];
- //cout<<r[1]-v[i][1].size()+1;
- for(int j=0;j<=-v[i][1].size()+r[1];j++)cout<<" ";
- cout<<v[i][2];
- for(int j=0;j<=-v[i][2].size()+r[2];j++)cout<<" ";
- //if(v[i][3].size()){cout<<r[2]-v[i][2].size()+1;
- cout<<v[i][3];
- // for(int j=0;j<=-v[i][3].size()+r[3];j++)cout<<" ";
- //cout<<r[3]-v[i][3].size()+1;
- cout<<endl;
- }
- int i;
- int sum=0,start=0;
- for(i=1;i<=cnt;i++)
- {
- cout<<i<<endl;
- if(v[i][1].size()>0)
- {
- if(v[i][2]=="DC")
- {
- int k1=0;
- string h;h=v[i][3];
- int start=0,semn=1;
- if(h[0]=='-')start++,semn=-1;
- for(int j=start;j<h.size();j++)
- k1=k1*10+h[j]-'0';
- mp[v[i][1]]=k1*semn;
- continue;
- }
- }
- if(v[i][2]=="READ")
- {
- mp[v[i][3]]=valori[++start];
- continue;
- }
- if(v[i][2]=="LOAD")
- {
- int nr=0;
- string h("");h=v[i][3];
- if(mp.find(h)!=mp.end())
- sum=mp[v[i][3]];
- else
- {
- int start=1,semn=1;
- if(h[0]=='-')start++,semn=-1;
- for(int j=start;j<h.size();j++)
- nr=nr*10+h[j]-'0';
- sum=nr;
- continue;
- }
- continue;
- }
- if(v[i][2]=="MULT")
- {
- int nr=0;
- string h("");h=v[i][3];
- if(mp.find(h)!=mp.end())
- sum=(1LL*mp[v[i][3]]*sum)%1000000;
- else
- {
- int start=1,semn=1;
- if(h[0]=='-')start++,semn=-1;
- for(int j=start;j<h.size();j++)
- nr=nr*10+h[j]-'0';
- sum=(1LL*sum*nr)%1000000;
- continue;
- }
- continue;
- }
- if(v[i][2]=="ADD")
- { int nr=0;
- string h("");h=v[i][3];
- if(mp.find(h)!=mp.end())
- sum=(sum+mp[v[i][3]])%1000000;
- else
- {
- int start=1,semn=1;
- if(h[0]=='-')start++,semn=-1;
- for(int j=start;j<h.size();j++)
- nr=nr*10+h[j]-'0';
- sum=(sum+nr)%1000000;
- continue;
- }
- continue;
- }
- if(v[i][2]=="DIV")
- {
- int nr=0;
- string h("");h=v[i][3];
- if(mp.find(h)!=mp.end())
- sum=sum/mp[v[i][3]];
- else
- {
- int start=1,semn=1;
- if(h[0]=='-')start++,semn=-1;
- for(int j=start;j<h.size();j++)
- nr=nr*10+h[j]-'0';
- sum=sum/nr;
- continue;
- }
- continue;
- }
- if(v[i][2]=="SUB")
- {
- int nr=0;
- string h("");h=v[i][3];
- if(mp.find(h)!=mp.end())
- sum-=mp[v[i][3]];
- else
- {
- int start=1,semn=1;
- if(h[0]=='-')start++,semn=-1;
- for(int j=start;j<h.size();j++)
- nr=nr*10+h[j]-'0';
- sum-=nr;
- continue;
- }
- continue;
- }
- if(v[i][2]=="BE")
- {
- if(sum==0){
- int cnt3=i;
- ++i;
- while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
- --i;
- continue;
- }
- }
- if(v[i][2]=="BG")
- {
- if(sum>0){
- int cnt3=i;
- ++i;
- while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
- --i;
- continue;
- }
- }
- if(v[i][2]=="BL")
- {
- if(sum<0){
- int cnt3=i;
- ++i;
- while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
- --i;
- continue;
- }
- }
- if(v[i][2]=="BU")
- {
- int cnt3=i;
- ++i;
- while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
- --i;
- continue;
- }
- if(v[i][2]=="PRINT")
- {
- cout<<mp[v[i][3]]<<endl;
- continue;
- }
- if(v[i][2]=="STORE")
- {
- mp[v[i][3]]=sum;
- }
- if(v[i][2]=="END")break;
- if(v[i][2]=="READ")
- {
- mp[v[i][3]]=valori[++start];
- continue;
- }
- }
- cout<<sum<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement