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;
}