| Task: | Niitty | 
| Sender: | zfoil | 
| Submission time: | 2024-11-10 15:01:01 +0200 | 
| Language: | C | 
| Status: | READY | 
| Result: | 20 | 
| group | verdict | score | 
|---|---|---|
| #1 | ACCEPTED | 4 | 
| #2 | ACCEPTED | 6 | 
| #3 | ACCEPTED | 10 | 
| #4 | TIME LIMIT EXCEEDED | 0 | 
| #5 | TIME LIMIT EXCEEDED | 0 | 
| #6 | TIME LIMIT EXCEEDED | 0 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #2 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #3 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #4 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #5 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #6 | ACCEPTED | 0.01 s | 2, 3, 4, 5, 6 | details | 
| #7 | ACCEPTED | 0.01 s | 2, 3, 4, 5, 6 | details | 
| #8 | ACCEPTED | 0.01 s | 2, 3, 4, 5, 6 | details | 
| #9 | ACCEPTED | 0.01 s | 2, 3, 4, 5, 6 | details | 
| #10 | ACCEPTED | 0.20 s | 3, 4, 5, 6 | details | 
| #11 | ACCEPTED | 0.18 s | 3, 4, 5, 6 | details | 
| #12 | ACCEPTED | 0.20 s | 3, 4, 5, 6 | details | 
| #13 | ACCEPTED | 0.17 s | 3, 4, 5, 6 | details | 
| #14 | TIME LIMIT EXCEEDED | -- | 4, 5, 6 | details | 
| #15 | TIME LIMIT EXCEEDED | -- | 4, 5, 6 | details | 
| #16 | TIME LIMIT EXCEEDED | -- | 4, 5, 6 | details | 
| #17 | TIME LIMIT EXCEEDED | -- | 4, 5, 6 | details | 
| #18 | TIME LIMIT EXCEEDED | -- | 5, 6 | details | 
| #19 | TIME LIMIT EXCEEDED | -- | 5, 6 | details | 
| #20 | TIME LIMIT EXCEEDED | -- | 5, 6 | details | 
| #21 | TIME LIMIT EXCEEDED | -- | 5, 6 | details | 
| #22 | TIME LIMIT EXCEEDED | -- | 6 | details | 
| #23 | TIME LIMIT EXCEEDED | -- | 6 | details | 
| #24 | TIME LIMIT EXCEEDED | -- | 6 | details | 
| #25 | TIME LIMIT EXCEEDED | -- | 6 | details | 
Compiler report
input/code.c: In function 'main':
input/code.c:143:16: warning: unused variable 'j' [-Wunused-variable]
  143 |         int i, j, result;
      |                ^
input/code.c:143:13: warning: unused variable 'i' [-Wunused-variable]
  143 |         int i, j, result;
      |             ^
input/code.c: In function 'create_field':
input/code.c:97:17: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |                 scanf("%s", flowers_in_row);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
input/code.c: In function 'main':
input/code.c:145:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  145 |         scanf("%d", &field.width);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~Code
#include <stdio.h>
#include <stdlib.h>
typedef struct {
	int letter_count[26];
} Alphabet;
typedef struct {
	int width;
	Alphabet *NW_flowers;
	Alphabet *empty_alphabet;
} Field;
int get_letter_index(char c)
{
	return (int)c - 65;
}
void reset_alphabet(Alphabet *alphabet)
{
	int i;
	for (i = 0; i < 26; i++) {
		alphabet->letter_count[i] = 0;
	}
}
void copy_alphabet(Alphabet *destination, Alphabet *source)
{
	int i;
	for (i = 0; i < 26; i++) {
		destination->letter_count[i] = source->letter_count[i];
	}
}
int contains_all_species(Alphabet *alphabet, Alphabet *all_flowers)
{
	int i;
	for (i = 0; i < 26; i++) {
		if (alphabet->letter_count[i] < 1 && all_flowers->letter_count[i] != 0) {
			return 0;
		}
	}
	return 1;
}
void add_alphabets(Alphabet *term1, Alphabet *term2)
{
	int i;
	for (i = 0; i < 26; i++) {
		term1->letter_count[i] += term2->letter_count[i];
	}
}
void subtract_alphabets(Alphabet *term1, Alphabet *term2)
{
	int i;
	for (i = 0; i < 26; i++) {
		term1->letter_count[i] -= term2->letter_count[i];
	}
}
void print_alphabet(Alphabet *alphabet)
{
	int i;
	for (i = 0; i < 26; i++) {
		printf("%d", alphabet->letter_count[i]);
	}
	printf("\n");
}
Alphabet *get_at(Field *field, int column, int row)
{
	if (column < 0 || row < 0) {
		return field->empty_alphabet;
	}
	return field->NW_flowers + row * field->width + column;
}
void update_flower_count(Field *field, int row, int column, Alphabet *row_running_total)
{
	if (row > 0) {
		copy_alphabet(get_at(field, column, row), get_at(field, column, row - 1));
	} else {
		reset_alphabet(get_at(field, column, row));
	}
	add_alphabets(get_at(field, column, row), row_running_total);
}
void create_field(Field *field)
{
	int row, column, letter_index;
	char *flowers_in_row;
	Alphabet row_running_total;
	flowers_in_row = malloc(field->width * sizeof(*flowers_in_row));
	for (row = 0; row < field->width; row++) {
		scanf("%s", flowers_in_row);
		reset_alphabet(&row_running_total);
		for (column = 0; column < field->width; column++) {
			letter_index = get_letter_index(flowers_in_row[column]);
			row_running_total.letter_count[letter_index]++;
			update_flower_count(field, row, column, &row_running_total);
		}
	}
}
void get_quadrant_alphabet(Alphabet *result, Field *field, int x, int y, int width, int height)
{
	Alphabet *full, *top_excess, *bottom_excess, *corner;
	full          = get_at(field, x + width - 1, y + height - 1);
	top_excess    = get_at(field, x + width - 1, y - 1);
	bottom_excess = get_at(field, x - 1, y + height - 1);
	corner        = get_at(field, x - 1, y - 1);
	add_alphabets(result, full);
	subtract_alphabets(result, top_excess);
	subtract_alphabets(result, bottom_excess);
	add_alphabets(result, corner);
}
int get_number_of_possible_fences(Field *field)
{
	int total = 0, i, j, k, l, max = field->width - 1;
	Alphabet result, *all_flowers;
	all_flowers = get_at(field, max, max);
	for (i = max; i >= 0; i--) {
		for (j = max; j >= 0; j--) {
			for (k = i + 1; k <= max + 1; k++) {
				for (l = j + 1; l <= max + 1; l++) {
					reset_alphabet(&result);
					get_quadrant_alphabet(&result, field, i, j, k - i, l - j);
					if (contains_all_species(&result, all_flowers)) {
						total++;
					}
				}
			}
		}
	}
	return total;
}
int main(void)
{
	int i, j, result;
	Field field;
	scanf("%d", &field.width);
	field.NW_flowers = malloc(field.width * field.width * sizeof(*field.NW_flowers));
	field.empty_alphabet = malloc(sizeof(*field.empty_alphabet));
	reset_alphabet(field.empty_alphabet);
	create_field(&field);
	/*
	for (i = 0; i < field.width; i++) {
		for (j = 0; j < field.width; j++) {
			print_alphabet(get_at(&field, i, j));
		}
		printf("\n");
	}
	*/
	result = get_number_of_possible_fences(&field);
	printf("%d\n", result);
	return 0;
}
Test details
Test 1
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 10 TNCTNPNTPC NPPNTNTPTP NTNTTCNTCT NPCPNPPNTT ...  | 
| correct output | 
|---|
| 2035 | 
| user output | 
|---|
| 2035 | 
Test 2
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 10 NFWQLWNWYS DZOQJVXFPJ CNHXPXMCQD QRTBVNLTQC ...  | 
| correct output | 
|---|
| 9 | 
| user output | 
|---|
| 9 | 
Test 3
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 10 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX ...  | 
| correct output | 
|---|
| 3025 | 
| user output | 
|---|
| 3025 | 
Test 4
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 10 FFFFFFFFFF FFFFFCFFFF FFFFFFJFFF FFFFFFFFFF ...  | 
| correct output | 
|---|
| 12 | 
| user output | 
|---|
| 12 | 
Test 5
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 1 X  | 
| correct output | 
|---|
| 1 | 
| user output | 
|---|
| 1 | 
Test 6
Group: 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 20 BBCBUBOUOBBCUUBBCOUO BOUCOOCUBCOOOCOBOCUO UCCUUUOBCOCBCBUBUCOO BUOBUCUCUOOBCOOUBUOO ...  | 
| correct output | 
|---|
| 38724 | 
| user output | 
|---|
| 38724 | 
Test 7
Group: 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 20 CBGLSHGZHYZDWBNDBJUG SMUXOJQYPXZDTMJUIWOJ XIDSTNBGHKRKOVUVMINB MTQGCFRUHQKALXRNCQGS ...  | 
| correct output | 
|---|
| 8334 | 
| user output | 
|---|
| 8334 | 
Test 8
Group: 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 20 KKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKK ...  | 
| correct output | 
|---|
| 44100 | 
| user output | 
|---|
| 44100 | 
Test 9
Group: 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 20 AAAAAAAAXAAAAAAAAAAA AAAWAAAAAAAAAAAAAOAA AAAAAAAAAAAAAAAAAPAA AAAAAAAAKAAAAAAAAAAZ ...  | 
| correct output | 
|---|
| 18 | 
| user output | 
|---|
| 18 | 
Test 10
Group: 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 50 GRGREEEGREGXRXXEGXXREXGRRRGRRR...  | 
| correct output | 
|---|
| 1584665 | 
| user output | 
|---|
| 1584665 | 
Test 11
Group: 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 50 AITIISJUHCCRZNKSDCNQKYSQRINFWJ...  | 
| correct output | 
|---|
| 1077746 | 
| user output | 
|---|
| 1077746 | 
Test 12
Group: 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 50 OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO...  | 
| correct output | 
|---|
| 1625625 | 
| user output | 
|---|
| 1625625 | 
Test 13
Group: 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 50 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...  | 
| correct output | 
|---|
| 1680 | 
| user output | 
|---|
| 1680 | 
Test 14
Group: 4, 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 100 NNCMDCDDCCNNNDNCMMNCDCDCCDCDNM...  | 
| correct output | 
|---|
| 25325366 | 
| user output | 
|---|
| (empty) | 
Test 15
Group: 4, 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 100 LIMQQIHASECROEVILNVULGWZJPPKOG...  | 
| correct output | 
|---|
| 22342463 | 
| user output | 
|---|
| (empty) | 
Test 16
Group: 4, 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 100 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT...  | 
| correct output | 
|---|
| 25502500 | 
| user output | 
|---|
| (empty) | 
Test 17
Group: 4, 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 100 QXQQQQQQQQQQQQQQQQQQQQQQQQQQQQ...  | 
| correct output | 
|---|
| 25650 | 
| user output | 
|---|
| (empty) | 
Test 18
Group: 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200 NAANANMMKNKKAKMKMAKNKMNKMMNNAA...  | 
| correct output | 
|---|
| 403292767 | 
| user output | 
|---|
| (empty) | 
Test 19
Group: 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200 OMYWATTLURKQPTKEFMGGYAOONXWVSC...  | 
| correct output | 
|---|
| 388111321 | 
| user output | 
|---|
| (empty) | 
Test 20
Group: 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...  | 
| correct output | 
|---|
| 404010000 | 
| user output | 
|---|
| (empty) | 
Test 21
Group: 5, 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200 LLLLLLLLLLLLLLLLLHLLLLLLLLLLLL...  | 
| correct output | 
|---|
| 14159445 | 
| user output | 
|---|
| (empty) | 
Test 22
Group: 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500 VVHWVUHVHUWWWVUUUWVUUHUUWHWUVW...  | 
| correct output | 
|---|
| 15683003812 | 
| user output | 
|---|
| (empty) | 
Test 23
Group: 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500 OIMZGEQSBMBDSDXSWRFNKSGFEBBTJE...  | 
| correct output | 
|---|
| 15575906951 | 
| user output | 
|---|
| (empty) | 
Test 24
Group: 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500 IIIIIIIIIIIIIIIIIIIIIIIIIIIIII...  | 
| correct output | 
|---|
| 15687562500 | 
| user output | 
|---|
| (empty) | 
Test 25
Group: 6
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500 WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...  | 
| correct output | 
|---|
| 3058970930 | 
| user output | 
|---|
| (empty) | 
