Submission

Status:

-PPP------

Subtask/Task Score:

30/100

Score: 30

User: PureIsSoFuckingCute

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

Language: cpp

Time: 0.002 second

Submitted On: 2026-09-28 00:08:08

#include <iostream>
#include <string>
#include <bitset>
using namespace std;

string signalFV(string binary,int size);
string continueSignal(string binary,int size);
string signalZV(string binary,int size);
string ascii_toBinary(string ascii);

int main() 
{
    string binary;
    int size;
    cin >> binary >> size;
	string ascii = ascii_toBinary(binary);
	for (int i=0;i<size;i++) {
		if (i==0) {
			if (binary[0] >= 65 && binary[0] <=122) {
				cout << signalFV(ascii,size) << "\n";	
			}
			else {
				cout << signalFV(binary,size) << "\n";
			}
		}
		else if (i == size-1) {
			if (binary[0] >= 65 && binary[0] <=122) {
                cout << signalZV(ascii,size) << "\n"; 
            }
            else {
                cout << signalZV(binary,size) << "\n";
            }

		}
		else {
			if (binary[0] >= 65 && binary[0] <=122) {
                cout << continueSignal(ascii,size) << "\n"; 
            }
            else {
                cout << continueSignal(binary,size) << "\n";
            }

		}
	}
}

string signalFV(string binary,int size) 
{
	int n = binary.length();
    string biDigit = "x";
    for (int i=0;i<n;i++) {
        if (binary[i] == '1') {
			biDigit.append(size-1 , 'x');
		}
		else {
			if (i + 1 < n && binary[i+1] == '1') {
				biDigit.append(size-2 , '_');
				biDigit += 'x';	
			}
			else {
				biDigit.append(size-1,'_');
			}
		}
    }
    return biDigit;
}

string continueSignal(string binary,int size) 
{	
	int n = binary.length();
	string row = "";
	for (int i=0;i<n;i++) {
		int chunkLen = (i==0) ? size : size-1;
		string chunk(chunkLen, '_');
		
		if (i == 0; binary[0] == '0') {
			chunk[0] = 'x';
		}
		if (i < n-1 && binary[i] != binary[i+1]) {
			chunk[chunkLen-1] = 'x';
		}
		row += chunk;
	}
	return row;
}

string signalZV(string binary,int size)
{
	int n = binary.length();
	string row = "";
	for (int i=0;i<n;i++) {

		int digitSize = (i == 0) ? size : size-1;
		string biDigit;

		if (binary[i] == '0') {
			biDigit = string(digitSize , 'x');
		}
		else if (i < n-1 && binary[i+1] == '0') {
			biDigit = string(digitSize-1 , '_') + "x";
		}
		else {
			biDigit = string(digitSize , '_');
		}
		row += biDigit;
	}
	return row;
}

string ascii_toBinary(string ascii) 
{
    string sBin = "";
    for (int i=0;i<ascii.length();i++) {
        int demi = static_cast<unsigned char>(ascii[i]);
        bitset<8> binary(demi);
        sBin += binary.to_string();
	}    
	return sBin;
}