Submission
Status:
PPPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: Miracle
Problemset: กราฟสัญญาณดิจิทัล
Language: cpp
Time: 0.005 second
Submitted On: 2026-09-23 22:35:02
#include <bits/stdc++.h>
using namespace std;
#define drawX(size, count) ((size) * (count) - count)
void fill_col(vector<string> &s, int col) {
for (int i = 0; i < s.size(); ++i)
s[i][col] = 'x';
}
void fill_row(vector<string> &s, int row, int start, int stop) {
while (start <= stop) {
s[row][start++] = 'x';
}
}
void send_signal(vector<pair<int, int>> &interval, vector<string> &signal,
int &size) {
int index = 0;
if (interval[0].first == 0)
fill_col(signal, 0);
for (int i = 0; i < interval.size(); ++i) {
int state = interval[i].first;
int count = interval[i].second;
int state_row = 0;
if (state == 0)
state_row = size - 1;
fill_row(signal, state_row, index, index + drawX(size, count));
index += drawX(size, count);
if (i != interval.size() - 1)
fill_col(signal, index);
}
}
string ascii_to_binary(int c) {
string bin = "";
while (c) {
bin.push_back((char)((c % 2) + '0'));
c /= 2;
}
reverse(bin.begin(), bin.end());
return string(8 - bin.length(), '0') + bin;
}
int main() {
int size;
string digit = "", input;
cin >> input >> size;
// clean data convert character to binary.
for (int i = 0; i < input.length(); ++i) {
if (input[i] != '1' && input[i] != '0') {
digit += ascii_to_binary(input[i]);
} else
digit.push_back(input[i]);
}
vector<pair<int, int>> interval;
int i = 0;
for (size_t i = 0; i < digit.size();) {
const char value = digit[i];
size_t start = i;
while (i < digit.size() && digit[i] == value) {
++i;
}
interval.emplace_back(value - '0', i - start);
}
vector<string> signal(size, string(digit.length() * (size-1) + 1, '_'));
send_signal(interval, signal, size);
// print signals.
for (vector<string>::iterator c = signal.begin(); c != signal.end(); c++)
cout << *c << "\n";
return 0;
}