Submission #75157687


Source Code Expand

Copy
#include <stdio.h>
#include <inttypes.h>
#define MAX 512345
#define BIT_MAX (MAX * 2)
int bit_table[BIT_MAX];
void bit_add(int pos, int value) {
pos++;
while (pos <= BIT_MAX) {
bit_table[pos - 1] += value;
pos += pos & (-pos);
}
}
int bit_sum(int pos) {
int sum = 0;
pos++;
while (pos > 0) {
sum += bit_table[pos - 1];
pos -= pos & (-pos);
}
return sum;
}
int N;
char S[MAX];
int cnt_list[MAX];
int main(void) {
int i, cnt = 0, pos = MAX - 1;
int64_t ans = 0;
if (fgets(S, sizeof(S), stdin) == NULL || sscanf(S, "%d", &N) != 1) return 1;
if (fgets(S, sizeof(S), stdin) == NULL) return 1;
for (i = 0; i < N; i++) {
cnt += (S[i] == 'B') - (S[i] == 'A');
cnt_list[i] = cnt;
bit_add(cnt + MAX, 1);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <inttypes.h>

#define MAX 512345

#define BIT_MAX (MAX * 2)

int bit_table[BIT_MAX];

void bit_add(int pos, int value) {
	pos++;
	while (pos <= BIT_MAX) {
		bit_table[pos - 1] += value;
		pos += pos & (-pos);
	}
}

int bit_sum(int pos) {
	int sum = 0;
	pos++;
	while (pos > 0) {
		sum += bit_table[pos - 1];
		pos -= pos & (-pos);
	}
	return sum;
}

int N;
char S[MAX];

int cnt_list[MAX];

int main(void) {
	int i, cnt = 0, pos = MAX - 1;
	int64_t ans = 0;
	if (fgets(S, sizeof(S), stdin) == NULL || sscanf(S, "%d", &N) != 1) return 1;
	if (fgets(S, sizeof(S), stdin) == NULL) return 1;
	for (i = 0; i < N; i++) {
		cnt += (S[i] == 'B') - (S[i] == 'A');
		cnt_list[i] = cnt;
		bit_add(cnt + MAX, 1);
	}
	for (i = 0; i < N; i++) {
		ans += bit_sum(pos);
		bit_add(cnt_list[i] + MAX, -1);
		pos += (S[i] == 'B') - (S[i] == 'A');
	}
	printf("%" PRId64 "\n", ans);
	return 0;
}

/*

B の数から A の数を引いて、負になればおk
最初から最後までカウント → BIT で累積和
最初から削っていく → 解釈をシフト

*/

Submission Info

Submission Time
Task E - A > B substring
User mikecat
Language C23 (GCC 14.2.0)
Score 450
Code Size 1139 Byte
Status AC
Exec Time 15 ms
Memory 6212 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 3
AC × 35
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 1776 KiB
00_sample_01.txt AC 0 ms 1860 KiB
00_sample_02.txt AC 0 ms 1712 KiB
01_random_03.txt AC 15 ms 4148 KiB
01_random_04.txt AC 14 ms 4308 KiB
01_random_05.txt AC 14 ms 4180 KiB
01_random_06.txt AC 15 ms 4260 KiB
01_random_07.txt AC 15 ms 4208 KiB
01_random_08.txt AC 15 ms 4132 KiB
01_random_09.txt AC 15 ms 4140 KiB
01_random_10.txt AC 14 ms 4268 KiB
01_random_11.txt AC 15 ms 4148 KiB
01_random_12.txt AC 15 ms 4380 KiB
01_random_13.txt AC 15 ms 4300 KiB
01_random_14.txt AC 15 ms 4380 KiB
01_random_15.txt AC 15 ms 4172 KiB
01_random_16.txt AC 12 ms 3868 KiB
01_random_17.txt AC 9 ms 3172 KiB
01_random_18.txt AC 7 ms 2884 KiB
01_random_19.txt AC 7 ms 2892 KiB
01_random_20.txt AC 7 ms 3028 KiB
01_random_21.txt AC 9 ms 3124 KiB
01_random_22.txt AC 5 ms 2468 KiB
01_random_23.txt AC 5 ms 2468 KiB
01_random_24.txt AC 9 ms 4308 KiB
01_random_25.txt AC 10 ms 4132 KiB
01_random_26.txt AC 14 ms 5452 KiB
01_random_27.txt AC 12 ms 5924 KiB
01_random_28.txt AC 14 ms 4932 KiB
01_random_29.txt AC 11 ms 6108 KiB
01_random_30.txt AC 12 ms 6212 KiB
01_random_31.txt AC 9 ms 4212 KiB
01_random_32.txt AC 0 ms 1860 KiB
01_random_33.txt AC 0 ms 1700 KiB
01_random_34.txt AC 0 ms 1948 KiB


2026-04-22 (Wed)
07:52:26 +09:00