Skip to main content

AtCoder Beginner Contest 156

Problema A - Beginner

Descrição

Você é um programador que está participando de competições de programação há N vezes. Seu rating real é R, mas devido à sua inexperiência, seu rating exibido é menor que o real. Especificamente, se N ≤ 10, seu rating exibido é R - 100 × (10 - N). Se N > 10, seu rating exibido é igual ao seu rating real R.

Solução

#include <stdio.h>

int main() {
int n,r, a=0;
scanf("%d%d\n", &n, &r);

if (n >= 10){
printf("%d\n", r);
} else {
a = 100 * ( 10 - n);
printf("%d\n", a + r);

}
return 0;
}

Problema B - Digits

Descrição

Dado um número inteiro positivo N e uma base K, determine o número de dígitos que N tem quando representado na base K.

Solução

#include <stdio.h>

int main() {
int x,m,j=0;
scanf("%d %d",&x,&m);

while(x) {
x/=m;
j++;

}
printf("%d\n",j);

return 0;
}

Problema C - Rally

Descrição

Há N pontos em uma linha, cada um com coordenada Xi. Você pode construir uma estação em qualquer coordenada inteira. Para cada ponto, o custo é o quadrado da distância até a estação mais próxima. Determine o custo mínimo total possível.

Solução

#include <stdio.h>

int main() {
int n;
scanf("%d", &n);
int x[n];

for(int i = 0; i < n; ++i)
scanf("%d", &x[i]);

int mini = x[0], maxi = x[0];

for(int i = 1; i < n; ++i) {
if (x[i] > maxi)
maxi = x[i];

if (x[i] < mini)
mini = x[i];
}

int melhorTotal;

for(int p = mini; p <= maxi; ++p) {
int total = 0;
for(int i = 0; i < n; ++i)
total += (x[i] - p)*(x[i] - p);
if (p == mini || total < melhorTotal)
melhorTotal = total;
}

printf("%d\n", melhorTotal);



return 0;
}