Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. string str[15];
  4. string v[1005][5];
  5. char litmM(char ad)
  6. {
  7. if(!(ad>='a'&&ad<='z'))return ad;
  8. return ad-'a'+'A';
  9. }
  10. int max1(int a,int b)
  11. {
  12. if(a<b)return b;
  13. return a;
  14. }
  15. string stmM(string s)
  16. {
  17. int n=s.size(),i;
  18. string str1;
  19. for(i=0;i<n;i++)
  20. {
  21. str1+=litmM(s[i]);
  22. }
  23. return str1;
  24. }
  25. int valori[500];
  26. int main()
  27. {
  28. ifstream cin("a.in");
  29. ofstream cout("a.out");
  30. str[1]="PRINT";str[2]="LOAD";str[3]="MULT";str[4]="SUB";str[5]="DIV";
  31. str[6]="STORE";str[7]="ADD";str[8]="BG";str[9]="BE";str[10]="BL";str[11]="BU";
  32. str[12]="READ";str[13]="DC";str[14]="END";
  33. map<string,int>mp;
  34. int cnt=1,l2=0;
  35. int r[5];
  36. r[1]=r[2]=r[3]=0;
  37. string m;
  38. int el=1;
  39. int nr=0;
  40. int k=0;
  41. getline(cin,m);
  42. k=m.size();
  43. for(int i=0;i<k;i++)
  44. {
  45. ++l2;
  46. int semn=1;
  47. if(m[i]==' ')continue;
  48. if(m[i]=='-'){semn=-1;++i;}
  49. while(m[i]>='0'&&m[i]<='9')
  50. {
  51. valori[l2]=valori[l2]*10+m[i]-'0';
  52. i++;
  53. }
  54. valori[l2]*=semn;
  55. }
  56. cout<<"STOP"<<endl;
  57. while(getline(cin,m))
  58. {
  59. if(m[0]==NULL)break;
  60. stringstream is(m);
  61. string word;
  62. while(is>>word)
  63. {
  64. if(word.size()>0&&word[0]==' ')continue;
  65. //cout<<word<<endl;
  66. if(el==2)
  67. {
  68. r[2]=max1(r[2],word.size());
  69. el=3;
  70. //cout<<word<<endl;
  71. v[cnt][2]=stmM(word);
  72. //cout<<v[cnt][2]<<endl;
  73. }
  74. else
  75. if(el==3) {
  76. r[3]=max1(r[3],word.size());
  77. el=1;
  78. v[cnt][3]=word;++cnt;
  79. }
  80. else
  81. if(el==1)
  82. {
  83. ++el;
  84. if(mp.find(word)!=mp.end())
  85. {
  86. r[1]=max1(r[1],word.size());
  87. v[cnt][1]=word;
  88. }else
  89. {
  90. string l("");
  91. l=stmM(word);
  92. int ok=0;
  93. for(int i=1;i<=14;i++)
  94. {
  95. if(l==str[i])
  96. {
  97. ok=1;
  98. break;
  99. }
  100. }
  101. if(ok==1)
  102. {
  103. r[2]=max1(r[2],word.size());
  104. el=3;
  105. // cout<<word<<endl;
  106. v[cnt][2]=stmM(word);
  107. if(stmM(word)=="END")
  108. {
  109. el=1;
  110. ++cnt;
  111. continue;
  112. }
  113. //cout<<v[cnt][2]<<endl;
  114. }
  115. else
  116.  
  117. {
  118. r[1]=max1(r[1],word.size());
  119. v[cnt][1]=word;
  120. mp[word]=1;
  121. }
  122. }
  123. }
  124. }
  125. //if(word.size()>0&&word[0]!=' ')cout<<word<<endl;
  126. }
  127. cout<<cnt<<endl;
  128. for(int i=1;i<=cnt;i++)
  129. {
  130. cout<<v[i][1];
  131. //cout<<r[1]-v[i][1].size()+1;
  132. for(int j=0;j<=-v[i][1].size()+r[1];j++)cout<<" ";
  133. cout<<v[i][2];
  134. for(int j=0;j<=-v[i][2].size()+r[2];j++)cout<<" ";
  135. //if(v[i][3].size()){cout<<r[2]-v[i][2].size()+1;
  136. cout<<v[i][3];
  137. // for(int j=0;j<=-v[i][3].size()+r[3];j++)cout<<" ";
  138. //cout<<r[3]-v[i][3].size()+1;
  139. cout<<endl;
  140. }
  141. int i;
  142. int sum=0,start=0;
  143. for(i=1;i<=cnt;i++)
  144. {
  145. cout<<i<<endl;
  146. if(v[i][1].size()>0)
  147. {
  148. if(v[i][2]=="DC")
  149. {
  150. int k1=0;
  151. string h;h=v[i][3];
  152. int start=0,semn=1;
  153. if(h[0]=='-')start++,semn=-1;
  154. for(int j=start;j<h.size();j++)
  155. k1=k1*10+h[j]-'0';
  156. mp[v[i][1]]=k1*semn;
  157. continue;
  158. }
  159. }
  160. if(v[i][2]=="READ")
  161. {
  162. mp[v[i][3]]=valori[++start];
  163. continue;
  164. }
  165. if(v[i][2]=="LOAD")
  166. {
  167. int nr=0;
  168. string h("");h=v[i][3];
  169. if(mp.find(h)!=mp.end())
  170. sum=mp[v[i][3]];
  171. else
  172. {
  173. int start=1,semn=1;
  174. if(h[0]=='-')start++,semn=-1;
  175. for(int j=start;j<h.size();j++)
  176. nr=nr*10+h[j]-'0';
  177. sum=nr;
  178. continue;
  179. }
  180. continue;
  181. }
  182. if(v[i][2]=="MULT")
  183. {
  184. int nr=0;
  185. string h("");h=v[i][3];
  186. if(mp.find(h)!=mp.end())
  187. sum=(1LL*mp[v[i][3]]*sum)%1000000;
  188. else
  189. {
  190. int start=1,semn=1;
  191. if(h[0]=='-')start++,semn=-1;
  192. for(int j=start;j<h.size();j++)
  193. nr=nr*10+h[j]-'0';
  194. sum=(1LL*sum*nr)%1000000;
  195. continue;
  196. }
  197. continue;
  198. }
  199. if(v[i][2]=="ADD")
  200. { int nr=0;
  201. string h("");h=v[i][3];
  202. if(mp.find(h)!=mp.end())
  203. sum=(sum+mp[v[i][3]])%1000000;
  204. else
  205. {
  206. int start=1,semn=1;
  207. if(h[0]=='-')start++,semn=-1;
  208. for(int j=start;j<h.size();j++)
  209. nr=nr*10+h[j]-'0';
  210. sum=(sum+nr)%1000000;
  211. continue;
  212. }
  213. continue;
  214. }
  215. if(v[i][2]=="DIV")
  216. {
  217. int nr=0;
  218. string h("");h=v[i][3];
  219. if(mp.find(h)!=mp.end())
  220. sum=sum/mp[v[i][3]];
  221. else
  222. {
  223. int start=1,semn=1;
  224. if(h[0]=='-')start++,semn=-1;
  225. for(int j=start;j<h.size();j++)
  226. nr=nr*10+h[j]-'0';
  227. sum=sum/nr;
  228. continue;
  229. }
  230. continue;
  231. }
  232. if(v[i][2]=="SUB")
  233. {
  234. int nr=0;
  235. string h("");h=v[i][3];
  236. if(mp.find(h)!=mp.end())
  237. sum-=mp[v[i][3]];
  238. else
  239. {
  240. int start=1,semn=1;
  241. if(h[0]=='-')start++,semn=-1;
  242. for(int j=start;j<h.size();j++)
  243. nr=nr*10+h[j]-'0';
  244. sum-=nr;
  245. continue;
  246. }
  247. continue;
  248. }
  249. if(v[i][2]=="BE")
  250. {
  251. if(sum==0){
  252. int cnt3=i;
  253. ++i;
  254. while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
  255. --i;
  256. continue;
  257. }
  258. }
  259. if(v[i][2]=="BG")
  260. {
  261. if(sum>0){
  262. int cnt3=i;
  263. ++i;
  264. while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
  265. --i;
  266. continue;
  267. }
  268. }
  269.  
  270. if(v[i][2]=="BL")
  271. {
  272. if(sum<0){
  273. int cnt3=i;
  274. ++i;
  275. while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
  276. --i;
  277. continue;
  278. }
  279. }
  280.  
  281. if(v[i][2]=="BU")
  282. {
  283. int cnt3=i;
  284. ++i;
  285. while(i<=cnt&&v[i][1]!=v[cnt3][3])++i;
  286. --i;
  287. continue;
  288. }
  289. if(v[i][2]=="PRINT")
  290. {
  291. cout<<mp[v[i][3]]<<endl;
  292. continue;
  293. }
  294. if(v[i][2]=="STORE")
  295. {
  296. mp[v[i][3]]=sum;
  297. }
  298. if(v[i][2]=="END")break;
  299. if(v[i][2]=="READ")
  300. {
  301. mp[v[i][3]]=valori[++start];
  302. continue;
  303. }
  304. }
  305. cout<<sum<<endl;
  306. return 0;
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement