Submission
Status:
----------
Subtask/Task Score:
0/100
Score: 0
User: porpeang
Problemset: กราฟสัญญาณดิจิทัล
Language: cpp
Time: 0.004 second
Submitted On: 2026-10-07 14:01:22
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int a = 0;
string aa;
if (!(cin >> aa >> a)) return 0;
vector<int> vec;
// 1. แปลงข้อมูลนำเข้า (ข้อความตัวอักษร หรือ สตริงฐานสอง) เป็นลำดับบิต
if (aa[0] == '0' || aa[0] == '1') {
for (size_t i = 0; i < aa.size(); i++) {
vec.push_back(aa[i] - '0');
}
} else {
for (size_t i = 0; i < aa.size(); i++) {
for (int b = 7; b >= 0; b--) {
vec.push_back((aa[i] >> b) & 1);
}
}
}
int N = vec.size();
int width = N * (a - 1) + 1;
// 2. สร้างตารางกราฟขนาด a x width กำหนดค่าเริ่มต้นเป็น '_'
vector<string> grid(a, string(width, '_'));
// 3. ตั้งค่าจุดเริ่มต้นสัญญาณที่ +5V (ถ้าบิตแรกเป็น 0 ให้สร้างเส้นแนวตั้งลงมาที่ 0V)
if (vec[0] == 0) {
for (int j = 0; j < a; j++) {
grid[j][0] = 'X';
}
} else {
grid[0][0] = 'X';
}
// 4. วาดเส้นกราฟแนวนอนและเส้นเชื่อมแนวตั้งเมื่อสัญญาณเปลี่ยน
for (int i = 0; i < N; i++) {
int curr_val = vec[i];
int row_target = (curr_val == 1) ? 0 : a - 1;
int x_start = i * (a - 1);
int x_end = (i + 1) * (a - 1);
for (int x = x_start; x <= x_end; x++) {
grid[row_target][x] = 'X';
}
if (i + 1 < N && vec[i] != vec[i + 1]) {
for (int j = 0; j < a; j++) {
grid[j][x_end] = 'X';
}
}
}
// 5. พิมพ์ผลลัพธ์กราฟออกทางหน้าจอ
for (int j = 0; j < a; j++) {
cout << grid[j] << '\n';
}
return 0;
}