cache, flag
parent
f502803102
commit
d85ee21d5b
@ -0,0 +1,45 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#define N 1024
|
||||||
|
|
||||||
|
int gcd(int a, int b);
|
||||||
|
int main() {
|
||||||
|
int n, d;
|
||||||
|
int i, j, k;
|
||||||
|
/* to use shorter types such as short is a BAD idea */
|
||||||
|
static int A[N][N], B[N][N], C[N][N];
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
scanf("%d %d", &n, &d);
|
||||||
|
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
for (j = i; j < n; ++j) {
|
||||||
|
//printf("%d %d\n", i ,j);
|
||||||
|
A[i][j] = gcd(i + 2,j + 2);
|
||||||
|
A[j][i] = A[i][j];
|
||||||
|
}
|
||||||
|
//printf("nya!\n");
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
for (j = i; j < n; ++j) {
|
||||||
|
//printf("%d %d\n", i ,j);
|
||||||
|
B[i][j] = gcd(n - i,n - j);
|
||||||
|
B[j][i] = B[i][j];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
for (j = 0; j < n; ++j)
|
||||||
|
for (k = 0; k < n; ++k) {
|
||||||
|
//printf("i:%d, j^%d, k^%d\n", i, j, k);
|
||||||
|
C[i][j] += A[i][k] * B[j][k];
|
||||||
|
}
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
for (j = 0; j < n; ++j)
|
||||||
|
if (C[i][j] % d == 0)
|
||||||
|
++res;
|
||||||
|
|
||||||
|
printf("%d", res);
|
||||||
|
}
|
||||||
|
|
||||||
|
int gcd(int a, int b) {
|
||||||
|
return (a == 0) ? b : gcd(b % a, a);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,94 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
int check_registers(int a, int b, int max_reg);
|
||||||
|
int main() {
|
||||||
|
int max_reg = 4;
|
||||||
|
int zf = 0, to_exec = 1;
|
||||||
|
#ifdef REGISTERS
|
||||||
|
max_reg = REGISTERS;
|
||||||
|
#endif
|
||||||
|
/* A, B, C, D. Indice - 5 */
|
||||||
|
uint8_t reg[4] = {0, 0, 0, 0};
|
||||||
|
int i;
|
||||||
|
uint8_t a, b;
|
||||||
|
uint8_t x;
|
||||||
|
|
||||||
|
while (1) {;
|
||||||
|
scanf("%hhu", &x);
|
||||||
|
#ifdef _DEBUG
|
||||||
|
printf("x:%hhu\n", x);
|
||||||
|
#endif
|
||||||
|
if ((x & (1 << 7)) && !zf) {
|
||||||
|
to_exec = 0;
|
||||||
|
//zf = 0;
|
||||||
|
}
|
||||||
|
x &= 0x7F;
|
||||||
|
#ifdef _DEBUG
|
||||||
|
printf("zf:%d, to_exec:%d\n", zf, to_exec);
|
||||||
|
#endif
|
||||||
|
if (to_exec == 0) {
|
||||||
|
if ((x >= 1) && (x <= 3))
|
||||||
|
scanf("%hhu %hhu\n", &a, &b);
|
||||||
|
to_exec = 1;
|
||||||
|
zf = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (x) {
|
||||||
|
case 0:
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
scanf("%hhu %hhu\n", &a, &b);
|
||||||
|
if (check_registers(a, b, max_reg)) {
|
||||||
|
printf("-1\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
reg[a-5] += reg[b-5];
|
||||||
|
if (reg[a-5] == 0)
|
||||||
|
zf = 1;
|
||||||
|
else
|
||||||
|
zf = 0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
scanf("%hhu %hhu\n", &a, &b);
|
||||||
|
if(check_registers(a, b, max_reg)) {
|
||||||
|
printf("-1\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
reg[a-5] -= reg[b-5];
|
||||||
|
if (reg[a-5] == 0)
|
||||||
|
zf = 1;
|
||||||
|
else
|
||||||
|
zf = 0;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
scanf("%hhu %hhu\n", &a, &b);
|
||||||
|
if(check_registers(a, 0, max_reg)) {
|
||||||
|
printf("-1\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
reg[a-5] = b;
|
||||||
|
if (reg[a-5] == 0)
|
||||||
|
zf = 1;
|
||||||
|
else
|
||||||
|
zf = 0;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
for (i = 0; i < max_reg; ++i)
|
||||||
|
printf("%hhu ", reg[i]);
|
||||||
|
putchar('\n');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
to_exec = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_registers(int a, int b, int max_reg) {
|
||||||
|
a -= 5;
|
||||||
|
b -= 5;
|
||||||
|
if ((a >= max_reg) || (b >= max_reg))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue