-
[1450] Blitzcrank
- 時間限制: 1000 ms 記憶體限制: 65535 K
- 問題描述
-
NBUT 1450 Blitzcrank Blitzcrank is a robot.
There are some pretty good registers(寄存器) in Blitzcrank's body.
There are some instructions about register A and register B:
1.ADD A, B means a += b. The machine code is 80 AF BF.
2.ADD A, A means a += a. The machine code is F0 AF.
3.ADD B, B means b += b. The machine code is F0 BF.
4.ADD B, A means b += a. The machine code is 80 BF AF.
Now give you the values in register A and register B and some machine codes. You should calculate out the final value in register A and register B after operating the machine code.
- 輸入
-
The frist line contains an integer T, means there are T test cases.
For each test case, the first line contains two integers means the initial value of the register A and the register B in hexadecimal(十六進制).
The next line contains a series of hexadecimal numbers.
- 輸出
- For each test case, print the register A and register B's value in hexadecimal.
- 樣例輸入
-
2 A1 B2 80 AF BF F0 AF B2 B3 F0 AF F0 BF
- 樣例輸出
-
2A6 B2 164 166
- 提示
-
The first case's machine codes 80 AF BF F0 AF is composed of ADD A, B and ADD A, A.
- 來源
-
Monkeyde17
這題目其實挺水的,我寫着題的目的主要是想分享一下剛學到的超神string和stringstream的用法。 詳細介紹請看:http://blog.csdn.net/zhang_xueping/article/details/47846807
這題目是說給出兩個十六進制的數A和B,通過輸入特定字元串進行操作,同樣用十六進制輸出操作後的A和B。 具體操作為:
1.當輸入“80 AF BF”時,a += b;
2.當輸入“F0 AF”時,a += a.
3.當輸入“F0 BF”時,b += b.
4.當輸入“80 BF AF”時,b += a.
這題主要就是考察字元串的處理。用普通的方法可以很快敲出來:
不過這個代碼不是我要展示的重點,我覺得特别神奇的是string#include<cstring> #include<cstdio> #include<cmath> const int mx=1e6+10; char s[mx]; int a,b,l; int main() { int t; scanf("%d",&t); while(t--) { scanf("%X %X",&a,&b); getchar(); gets(s); //由于操作次數不确定,是以用scanf難以控制,則用gets比較友善 l=strlen(s); int i=0; while(i<l) { if(s[i]=='8') { if(s[i+3]=='A' ) a+=b; else if(s[i+3]=='B') b+=a; i+=9; } else if(s[i]=='F') { if(s[i+3]=='A') a+=a; else if(s[i+3]=='B') b+=b; i+=6; } } printf("%X %X\n",a,b); //此處的%x和%X要區分開,用大寫輸出的字母就是大寫,用小寫就輸出小寫字母 } return 0; }
就像處理整形資料一樣,好友善啊……/* Author:ZXPxx Memory: 268 KB Time: 343 MS Language: G++ Result: Accepted */ #include<cstring> #include<iostream> #include<sstream> #include<cstdio> using namespace std; stringstream sbuf; int main() { int t; scanf("%d",&t); while(t--) { int A,B; string str,op,a,b; cin>>hex>>A>>B; sbuf.clear(); cin.ignore(); getline(cin,str); sbuf<<str; while(sbuf>>op) { if(op=="80") { sbuf>>a>>b; if(a=="AF") A+=B; else B+=A; } else { sbuf>>a; if(a=="AF") A+=A; else B+=B; } } printf("%X %X\n",A,B); } return 0; }