Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- using namespace std;
- int main()
- {
- while (1)
- {
- int N;
- cin >> N;
- if (cin.eof())
- break;
- /*
- * Armazena a distância de cada ponto a uma origem.
- * O primeiro elemento é em relação ao ponto na origem (0).
- * Os elementos seguintes guardam a distância total desses
- * pontos à origem.
- * Por exemplo:
- * -- o input é representado por ">>"
- * -- o estado da array edges é representado por "{",
- * seguido dos elementos, e um "}" no fim.
- * { 0 }
- * >> 4
- * { 0 4 }
- * >> 2
- * { 0 4 6 } // 6, pois é a distância total do ponto à origem
- * >> 4
- * { 0 4 6 10 }
- * ...
- */
- int edges[N];
- /*
- * Comprimento da circunferência
- * Guarda também a distância até o último ponto informado no input
- */
- int totalLen = 0;
- /*
- * Guarda o mesmo que o array edges.
- * Serve para verificar se à determinada distância existe um ponto.
- */
- set<int> edgesSet;
- // Primeiro ponto está na origem
- edges[0] = 0;
- int len;
- /*
- * O for vai de 1 a (N - 1).
- * A última entrada geraria um ponto na origem, que já existe
- * e tem uma distância igual a 0 (o primeiro adicionado).
- */
- for (int i = 1; i < N; i++)
- {
- cin >> len;
- totalLen += len;
- edges[i] = totalLen;
- edgesSet.insert(totalLen);
- }
- // Última contagem conclui o comprimento total da circunferência
- cin >> len;
- totalLen += len;
- // O arco feito por cada lado do triângulo deve ser então:
- int arc = totalLen / 3;
- int count = 0;
- /*
- * Esse FOR verifica todos os pontos dentro do comprimento do
- * primeiro arco que começa na origem.
- * Para cada ponto, se houver um ponto a uma distância do arco
- * encontrada (arc) e houver um ponto a uma distância 2*arc,
- * teremos um triângulo.
- */
- for (int i = 0; edges[i] <= arc; i++)
- {
- if (edgesSet.find(edges[i] + arc) != edgesSet.end() &&
- edgesSet.find(edges[i] + arc + arc) != edgesSet.end())
- {
- count++;
- }
- }
- cout << count << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement