#include <stdio.h>
struct Record
{
size_t start;
size_t end;
size_t freq;
};
void display(const struct Record *records, const struct Record *record_x, const struct Record *record_y, size_t length);
size_t count_digits(size_t n);
int main(int argc, char *argv[])
{
struct Record record_x, record_y;
size_t length;
scanf("%u %u %u %u\n", &record_x.
start, &record_x.
end, &record_y.
start, &record_y.
end); struct Record records[length];
for(size_t i = 0; i < length; i++)
scanf("%u %u %u\n", &records
[i
].
start, &records
[i
].
end, &records
[i
].
freq); display(records, &record_x, &record_y, length);
return 0;
}
void display(const struct Record *records, const struct Record *record_x, const struct Record *record_y, size_t length)
{
size_t left_pad = count_digits(record_y->end);
for(size_t freq = record_y->end; freq >= record_y->start; freq--)
{
printf("%*u", left_pad
, freq
); for(size_t i = 0; i < length; i++)
{
printf("%*c", count_digits
(records
[i
].
start), ' '); printf("%c", records
[i
].
freq >= freq
? '*' : ' '); }
}
for(size_t i = 0; i < length; i++)
printf("%u ", records
[i
].
start); printf("%u\n", records
[length
- 1].
end); }
size_t count_digits(size_t n)
{
if(n == 0)
return 1;
for(size_t i = 1, count = 0; ; i *= 10, count++)
if(n / i == 0)
return count;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgoJc3RydWN0IFJlY29yZAoJewoJCXNpemVfdCBzdGFydDsKCQlzaXplX3QgZW5kOwoJCXNpemVfdCBmcmVxOwoJfTsKCXZvaWQgZGlzcGxheShjb25zdCBzdHJ1Y3QgUmVjb3JkICpyZWNvcmRzLCBjb25zdCBzdHJ1Y3QgUmVjb3JkICpyZWNvcmRfeCwgY29uc3Qgc3RydWN0IFJlY29yZCAqcmVjb3JkX3ksIHNpemVfdCBsZW5ndGgpOwoJc2l6ZV90IGNvdW50X2RpZ2l0cyhzaXplX3Qgbik7CgoJaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKCXsKCQlzdHJ1Y3QgUmVjb3JkIHJlY29yZF94LCByZWNvcmRfeTsKCQlzaXplX3QgbGVuZ3RoOwoJCXNjYW5mKCIldSAldSAldSAldVxuIiwgJnJlY29yZF94LnN0YXJ0LCAmcmVjb3JkX3guZW5kLCAmcmVjb3JkX3kuc3RhcnQsICZyZWNvcmRfeS5lbmQpOwoJCXNjYW5mKCIldSIsICZsZW5ndGgpOwoJCXN0cnVjdCBSZWNvcmQgcmVjb3Jkc1tsZW5ndGhdOwoJCWZvcihzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKCQkJc2NhbmYoIiV1ICV1ICV1XG4iLCAmcmVjb3Jkc1tpXS5zdGFydCwgJnJlY29yZHNbaV0uZW5kLCAmcmVjb3Jkc1tpXS5mcmVxKTsKCQlkaXNwbGF5KHJlY29yZHMsICZyZWNvcmRfeCwgJnJlY29yZF95LCBsZW5ndGgpOwoKCQlyZXR1cm4gMDsKCX0KCgl2b2lkIGRpc3BsYXkoY29uc3Qgc3RydWN0IFJlY29yZCAqcmVjb3JkcywgY29uc3Qgc3RydWN0IFJlY29yZCAqcmVjb3JkX3gsIGNvbnN0IHN0cnVjdCBSZWNvcmQgKnJlY29yZF95LCBzaXplX3QgbGVuZ3RoKQoJewoJCXNpemVfdCBsZWZ0X3BhZCA9IGNvdW50X2RpZ2l0cyhyZWNvcmRfeS0+ZW5kKTsKCQlmb3Ioc2l6ZV90IGZyZXEgPSByZWNvcmRfeS0+ZW5kOyBmcmVxID49IHJlY29yZF95LT5zdGFydDsgZnJlcS0tKQoJCXsKCQkJcHJpbnRmKCIlKnUiLCBsZWZ0X3BhZCwgZnJlcSk7CgkJCWZvcihzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKCQkJewoJCQkJcHJpbnRmKCIlKmMiLCBjb3VudF9kaWdpdHMocmVjb3Jkc1tpXS5zdGFydCksICcgJyk7CgkJCQlwcmludGYoIiVjIiwgcmVjb3Jkc1tpXS5mcmVxID49IGZyZXEgPyAnKicgOiAnICcpOwoJCQl9CgkJCXByaW50ZigiXG4iKTsKCQl9CgkJcHJpbnRmKCIlKmMiLCBsZWZ0X3BhZCwgJyAnKTsKCQlmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCgkJCXByaW50ZigiJXUgIiwgcmVjb3Jkc1tpXS5zdGFydCk7CgkJcHJpbnRmKCIldVxuIiwgcmVjb3Jkc1tsZW5ndGggLSAxXS5lbmQpOwoJfQoKCXNpemVfdCBjb3VudF9kaWdpdHMoc2l6ZV90IG4pCgl7CgkJaWYobiA9PSAwKQoJCQlyZXR1cm4gMTsKCQlmb3Ioc2l6ZV90IGkgPSAxLCBjb3VudCA9IDA7IDsgaSAqPSAxMCwgY291bnQrKykKCQkJaWYobiAvIGkgPT0gMCkKCQkJCXJldHVybiBjb3VudDsKCX0=