Submission

Status:

----------

Subtask/Task Score:

0/100

Score: 0

User: ZanTy

Problemset: กราฟสัญญาณดิจิทัล

Language: cpp

Time: 0.002 second

Submitted On: 2026-10-08 12:34:50

#include<bits/stdc++.h>
using namespace std;
string binaryconvert(char x){
    int y = x;
    string result;
    while (y){
        result = result + to_string(y%2);
        y /= 2;
    }
    result = result + '0';
    reverse(result.begin(),result.end());
    return result;
}

int main(){
    string str;
    int n;
    cin >> str >> n;
    vector<char> signal;
    bool isBinary = false;
    if (str[0] == '0' || str[0] == '1'){
        isBinary = true;
    }
    if (!isBinary){
        for (int i = 0;i < str.size();i++){
            string binary = binaryconvert(str[i]);
            for (int j = 0;j < 8;j++){
                signal.push_back(binary[j]);
            }
        }
    }
    else {
        for (int i = 0;i < str.size();i++){
            signal.push_back(str[i]);
        }
    }
    int h = signal.size();
    vector<int> sizesignal;
    for (int i = 0;i < h;i++){
        if (i == 0){
            sizesignal.push_back(n);
        }
        else if (signal[i] != signal[i-1]){
            sizesignal.push_back(n);
        }
        else{
            sizesignal.push_back(n-1);
        }
    }
    vector<int> start;
    for (int i = 0;i < h;i++){
        if (i == 0){
            start.push_back(0);
        }
        else {
            if (signal[i] == signal[i-1]){
                start.push_back(start[i-1] + sizesignal[i]);
            }
            else {
                start.push_back(start[i-1]-1 + sizesignal[i]);
            }
        }
    }
    int floor = n*h - h + 1;
    char arr[n][floor];
    for (int i = 0;i < n;i++){
        for (int j = 0;j < floor;j++){
            arr[i][j] = '_';
        }
    }
    if (signal[0] == '0'){
        for (int j = 0;j < n;j++){
            arr[j][0] = 'X';
        }
    }
    for (int i = 0;i < h;i++){
        if (i == h-1){
            for (int j = start[i];j < floor;j++){
                if (signal[i] == '0'){
                    arr[n-1][j] = 'X';
                }
                else {
                    arr[0][j] = 'X';
                }
            }
        }
        else {
            for (int j = start[i];j <= start[i+1];j++){
                if (signal[i] == '0'){
                    arr[n-1][j] = 'X';
                }
                else {
                    arr[0][j] = 'X';
                }
            }
        }
    }
    for (int i = 0;i < floor;i++){
        if (arr[n-1][i] == arr[0][i]){
            for (int j = 0;j < n;j++){
                arr[j][i] = 'X';
            }
        }
    }
    for (int i = 0;i < n;i++){
        for (int j = 0;j < floor;j++){
            cout << arr[i][j];
        }
        cout << '\n';
    }
}