Solução por Rogério Júnior
Checar qual seção que divide igualmente o território de valor equivale a checar qual delas é tal que, somando-a a a todos os territórios anteriores a ela, obtemos exatamente . Assim, vamos salvar o valores da entrada em um vetor e a soma deles em uma variável . Depois, declaramos uma variável , que será inicializada com o valor , e adicionaremos a ela, um a um, o valor de cada um dos territórios armazenados em . Quando o valor de for exatamente , então imprimiremos na tela o índice que correspondente àquela seção. É importante lembrar, porém, que para checar essa igualdade, devemos fazer , pois, em C++, como e são inteiros, retorna . Vamos ao código:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> // printf, scanf | |
int secao[100100], A, soma, n; // declare o vetor secao e as variáveis A, soma e n | |
int main(){ | |
scanf("%d", &n); | |
for(int i=1; i<=n; i++){ // leia a entrada | |
scanf("%d", &secao[i]); // salve o valor de cada seção no vetor | |
A+=secao[i]; // some o valor da seção atual a A para que, ao final da leitura da entrada, ela tenha o valor da soma de todos os territórios | |
} | |
for(int i=1; i<=n; i++){ // para cada índice do vetor | |
soma+=secao[i]; // adicione seu valor a soma | |
if(2*soma==A){ // cheque se a soma está valendo metade do território total | |
printf("%d\n", i); // se sim, imprima o valor do índice em que isso ocorreu | |
break; // e pare o loop | |
} | |
} | |
return 0; | |
} |
Abaixo, a solução, em Java, do leitor Roger Benet:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
public class solucao{ | |
public static void main(String[] args)throws IOException{ | |
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); | |
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out)); | |
int[] vet = new int[110000]; | |
int i,n,sm1,sm2; | |
String[] aux; | |
n = Integer.parseInt(in.readLine()); | |
aux = in.readLine().split(" "); | |
sm1 = 0; | |
sm2 = 0; | |
for(i = 0; i < n; i++){ | |
vet[i] = Integer.parseInt(aux[i]); | |
sm1 += vet[i]; | |
} | |
sm1 -= vet[i-1]; | |
sm2 += vet[i-1]; | |
for(i = n - 2; i > -1; i--){ | |
if(sm1 == sm2){ | |
out.write((i+1)+"\n"); | |
break; | |
} | |
else { | |
sm1 -= vet[i]; | |
sm2 += vet[i]; | |
} | |
} | |
out.flush(); | |
} | |
} |