문제

링크

풀이

#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
 
unordered_map<string, string> mp = {
  {"ADD", "00000"}, {"ADDC", "00001"}, {"SUB", "00010"}, {"SUBC", "00011"}, {"MOV", "00100"}, {"MOVC", "00101"},
  {"AND", "00110"}, {"ANDC", "00111"}, {"OR", "01000"}, {"ORC", "01001"}, {"NOT", "01010"},
  {"MULT", "01100"}, {"MULTC", "01101"}, {"LSFTL", "01110"}, {"LSFTLC", "01111"},
  {"LSFTR", "10000"}, {"LSFTRC", "10001"}, {"ASFTR", "10010"}, {"ASFTRC", "10011"},
  {"RL", "10100"}, {"RLC", "10101"}, {"RR", "10110"}, {"RRC", "10111"}
};
 
inline bool c(int d, int p) {
  return d & (1 << p);
}
 
void solve(void) {
  int n; cin >> n;
 
  while (n--) {
    string op; int d, a, b; cin >> op >> d >> a >> b;
    cout << mp[op] << 0 << c(d, 2) << c(d, 1) << c(d, 0);
    if (op == "MOV" || op == "MOVC" || op == "NOT") cout << "000";
    else cout << c(a, 2) << c(a, 1) << c(a, 0);
    if (op.back() != 'C') cout << c(b, 2) << c(b, 1) << c(b, 0) << 0;
    else cout << c(b, 3) << c(b, 2) << c(b, 1) << c(b, 0);
    cout << "\n";
  }
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}