Submission #50101006
Source Code Expand
#include <stdio.h>
#include <stdlib.h>
#define PNUM 333
long long p[PNUM] = {};
long long p_pow[PNUM] = {};
int cmp_ll_PNUM (const void *a, const void *b) {
long long *a_ = *(long long **)a;
long long *b_ = *(long long **)b;
int idx = 0;
while (idx < PNUM) {
if (a_[idx] < b_[idx]) {
return -1;
}
if (a_[idx] > b_[idx]) {
return 1;
}
idx++;
}
return 0;
}
int main () {
int n = 0;
char a[1001] = "";
int res = 0;
long long ans = 0LL;
long long *a_sort[1000] = {};
long long a_sort_arr[1000][PNUM] = {};
long long cnt[1000] = {};
int ucnt = 0;
p[0] = 2LL;
for (int i = 1; i < PNUM; i++) {
int is_ok = 0;
p[i] = p[i-1]+1LL;
while (is_ok <= 0) {
long long tmp = p[i];
is_ok = 1;
for (int j = 0; p[j]*p[j] <= p[i]; j++) {
if (p[i]%p[j] == 0LL) {
is_ok = 0;
}
}
if (is_ok <= 0) {
p[i] += 1LL;
}
}
}
for (int i = 0; i < PNUM; i++) {
p_pow[i] = 1LL;
while (p_pow[i] <= 2000000000LL/p[i]) {
p_pow[i] *= p[i];
}
}
res = scanf("%d", &n);
for (int i = 0; i < n; i++) {
int idx = 0;
res = scanf("%s", a);
a_sort[i] = a_sort_arr[i];
while (a[idx] != '\0') {
long long d = (long long)(a[idx]-'0');
idx++;
for (int j = 0; j < PNUM; j++) {
a_sort[i][j] *= 10LL;
a_sort[i][j] += d;
a_sort[i][j] %= p_pow[j];
}
}
}
qsort(a_sort, n, sizeof(long long *), cmp_ll_PNUM);
cnt[0] = 1LL;
ucnt = 1;
for (int i = 1; i < n; i++) {
if (cmp_ll_PNUM((void *)(a_sort+(i-1)), (void *)(a_sort+i)) != 0) {
a_sort[ucnt] = a_sort[i];
ucnt++;
}
cnt[ucnt-1] += 1LL;
}
for (int i = 0; i < ucnt; i++) {
for (int j = 0; j < i; j++) {
long long tmp[PNUM] = {};
long long *tmp_p = tmp;
int idx[2] = { 0, ucnt };
int ok[2] = {};
for (int k = 0; k < PNUM; k++) {
tmp[k] = (a_sort[j][k]*a_sort[i][k])%p_pow[k];
}
while (idx[1]-idx[0] > 1) {
int nxt = (idx[0]+idx[1])/2;
int s = ok[0];
if (s > ok[1]) {
s = ok[1];
}
while (s < PNUM && a_sort[nxt][s] == tmp_p[s]) {
s++;
}
if (s < PNUM && a_sort[nxt][s] > tmp_p[s]) {
idx[1] = nxt;
ok[1] = s;
} else {
idx[0] = nxt;
ok[0] = s;
}
}
if (cmp_ll_PNUM((void *)(a_sort+idx[0]), (void *)(&tmp_p)) == 0) {
ans += cnt[i]*cnt[j]*cnt[idx[0]];
}
}
}
ans <<= 1LL;
for (int i = 0; i < ucnt; i++) {
long long tmp[PNUM] = {};
long long *tmp_p = tmp;
int idx[2] = { 0, ucnt };
int ok[2] = {};
for (int k = 0; k < PNUM; k++) {
tmp[k] = (a_sort[i][k]*a_sort[i][k])%p_pow[k];
}
while (idx[1]-idx[0] > 1) {
int nxt = (idx[0]+idx[1])/2;
int s = ok[0];
if (s > ok[1]) {
s = ok[1];
}
while (s < PNUM && a_sort[nxt][s] == tmp_p[s]) {
s++;
}
if (s < PNUM && a_sort[nxt][s] > tmp_p[s]) {
idx[1] = nxt;
ok[1] = s;
} else {
idx[0] = nxt;
ok[0] = s;
}
}
if (cmp_ll_PNUM((void *)(a_sort+idx[0]), (void *)(&tmp_p)) == 0) {
ans += cnt[i]*cnt[i]*cnt[idx[0]];
}
}
printf("%lld\n", ans);
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Product Equality |
| User | chro4896 |
| Language | C (gcc 12.2.0) |
| Score | 550 |
| Code Size | 3529 Byte |
| Status | AC |
| Exec Time | 1459 ms |
| Memory | 4388 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 550 / 550 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt, sample_02.txt, sample_03.txt |
| All | hack_01.txt, hack_02.txt, hack_03.txt, hack_04.txt, hack_05.txt, hand_01.txt, sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| hack_01.txt | AC | 1458 ms | 4328 KiB |
| hack_02.txt | AC | 1459 ms | 4300 KiB |
| hack_03.txt | AC | 1457 ms | 4356 KiB |
| hack_04.txt | AC | 1457 ms | 4192 KiB |
| hack_05.txt | AC | 1458 ms | 4180 KiB |
| hand_01.txt | AC | 5 ms | 4204 KiB |
| sample_01.txt | AC | 1 ms | 4292 KiB |
| sample_02.txt | AC | 2 ms | 4188 KiB |
| sample_03.txt | AC | 2 ms | 4296 KiB |
| test_01.txt | AC | 2 ms | 4184 KiB |
| test_02.txt | AC | 2 ms | 4292 KiB |
| test_03.txt | AC | 508 ms | 4344 KiB |
| test_04.txt | AC | 524 ms | 4344 KiB |
| test_05.txt | AC | 3 ms | 4188 KiB |
| test_06.txt | AC | 197 ms | 4204 KiB |
| test_07.txt | AC | 498 ms | 4328 KiB |
| test_08.txt | AC | 509 ms | 4220 KiB |
| test_09.txt | AC | 525 ms | 4340 KiB |
| test_10.txt | AC | 3 ms | 4376 KiB |
| test_11.txt | AC | 205 ms | 4204 KiB |
| test_12.txt | AC | 498 ms | 4300 KiB |
| test_13.txt | AC | 491 ms | 4220 KiB |
| test_14.txt | AC | 562 ms | 4176 KiB |
| test_15.txt | AC | 661 ms | 4220 KiB |
| test_16.txt | AC | 758 ms | 4224 KiB |
| test_17.txt | AC | 991 ms | 4328 KiB |
| test_18.txt | AC | 363 ms | 4236 KiB |
| test_19.txt | AC | 490 ms | 4224 KiB |
| test_20.txt | AC | 558 ms | 4356 KiB |
| test_21.txt | AC | 659 ms | 4176 KiB |
| test_22.txt | AC | 750 ms | 4256 KiB |
| test_23.txt | AC | 1007 ms | 4348 KiB |
| test_24.txt | AC | 385 ms | 4204 KiB |
| test_25.txt | AC | 726 ms | 4388 KiB |
| test_26.txt | AC | 888 ms | 4204 KiB |
| test_27.txt | AC | 576 ms | 4260 KiB |
| test_28.txt | AC | 668 ms | 4200 KiB |
| test_29.txt | AC | 803 ms | 4220 KiB |
| test_30.txt | AC | 588 ms | 4232 KiB |
| test_31.txt | AC | 645 ms | 4208 KiB |
| test_32.txt | AC | 786 ms | 4356 KiB |
| test_33.txt | AC | 206 ms | 4336 KiB |
| test_34.txt | AC | 754 ms | 4352 KiB |
| test_35.txt | AC | 831 ms | 4204 KiB |
| test_36.txt | AC | 593 ms | 4300 KiB |
| test_37.txt | AC | 715 ms | 4192 KiB |
| test_38.txt | AC | 858 ms | 4188 KiB |
| test_39.txt | AC | 570 ms | 4204 KiB |
| test_40.txt | AC | 3 ms | 4328 KiB |
| test_41.txt | AC | 1 ms | 4292 KiB |
| test_42.txt | AC | 3 ms | 4200 KiB |
| test_43.txt | AC | 757 ms | 4232 KiB |
| test_44.txt | AC | 836 ms | 4388 KiB |
| test_45.txt | AC | 896 ms | 4208 KiB |
| test_46.txt | AC | 942 ms | 4348 KiB |
| test_47.txt | AC | 982 ms | 4376 KiB |
| test_48.txt | AC | 1012 ms | 4224 KiB |
| test_49.txt | AC | 1041 ms | 4348 KiB |
| test_50.txt | AC | 1064 ms | 4296 KiB |
| test_51.txt | AC | 1087 ms | 4356 KiB |
| test_52.txt | AC | 648 ms | 4224 KiB |
| test_53.txt | AC | 541 ms | 4220 KiB |
| test_54.txt | AC | 498 ms | 4348 KiB |
| test_55.txt | AC | 859 ms | 4372 KiB |
| test_56.txt | AC | 839 ms | 4204 KiB |
| test_57.txt | AC | 596 ms | 4324 KiB |
| test_58.txt | AC | 539 ms | 4296 KiB |
| test_59.txt | AC | 474 ms | 4340 KiB |
| test_60.txt | AC | 876 ms | 4188 KiB |
| test_61.txt | AC | 709 ms | 4336 KiB |
| test_62.txt | AC | 600 ms | 4220 KiB |
| test_63.txt | AC | 558 ms | 4352 KiB |
| test_64.txt | AC | 491 ms | 4224 KiB |
| test_65.txt | AC | 897 ms | 4192 KiB |
| test_66.txt | AC | 757 ms | 4300 KiB |
| test_67.txt | AC | 614 ms | 4192 KiB |
| test_68.txt | AC | 553 ms | 4236 KiB |
| test_69.txt | AC | 495 ms | 4324 KiB |
| test_70.txt | AC | 875 ms | 4176 KiB |
| test_71.txt | AC | 720 ms | 4300 KiB |