Submission
Status:
PPPPPPPPPP
Score: 100
User: pxsit
Problemset: กราฟสัญญาณดิจิทัล
Language: cpp
Time: 0.002 second
Submitted On: 2024-11-14 21:22:20
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void ctob(char c, char *binary) {
for (int i = 7; i >= 0; i--) {
binary[7-i] = ((c & (1 << i)) ? '1' : '0');
}
binary[8] = '\0';
}
int main()
{
char string[10000];
char binary_string[80000] = "";
int n;
scanf("%s", string);
scanf("%d", &n);
int needs_conversion = 0;
for (int i = 0; i < strlen(string); i++) {
if (string[i] != '0' && string[i] != '1') {
needs_conversion = 1;
break;
}
}
if (needs_conversion) {
for (int i = 0; i < strlen(string); i++) {
char binary[9];
ctob(string[i], binary);
strcat(binary_string, binary);
}
strcpy(string, binary_string);
}
strcat(string, "9");
int countSame = 1;
char signal[100000];
int index = 0;
for (int i = 0; i < strlen(string) - 1; i++)
{
if (string[i] == string[i + 1])
{
countSame++;
}
else
{
if (string[i] == '1')
{
for (int j = 0; j < (n * countSame) - (countSame - 1); j++)
{
signal[index + j] = 'X';
}
index += (n * countSame) - (countSame - 1);
}
else
{
for (int j = 0; j < ((n * countSame) - (countSame - 1)) - 2; j++)
{
signal[index + j] = '_';
}
index += ((n * countSame) - (countSame - 1)) - 2;
}
countSame = 1;
}
}
char tempSig[100000];
strcpy(tempSig, signal);
int key = 0;
if (string[0] == '0')
{
key++;
signal[0] = 'X';
for (int i = 1; i < strlen(tempSig) + 1; i++)
signal[i] = tempSig[i - 1];
}
for (int i = 0; i < index + key; i++)
printf("%c", signal[i]);
int med[100000];
strcat(signal, "9");
for (int i = 0; i < index + key; i++)
{
if (signal[i] == 'X' && signal[i + 1] == '_')
med[i] = 'X';
else if (signal[i] == 'X' && signal[i - 1] == '_')
med[i] = 'X';
else
med[i] = '_';
}
printf("\n");
for (int j = 0; j < n - 2; j++)
{
for (int i = 0; i < index + key; i++)
{
printf("%c", med[i]);
}
printf("\n");
}
// last row
for(int i = 0; i < index + key; i++){
if((signal[i] == 'X' && signal[i+1] == '_') || (signal[i] == 'X' && signal[i-1] == '_'))
printf("X");
else{
if(signal[i] == 'X')
printf("_");
else
printf("X");
}
}
return 0;
}