Cod sursa(job #2919191)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 16 august 2022 13:34:32
Problema Medie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <bits/stdc++.h>
#define NMAX 9005
#define MAX_NUM 7005

using namespace std;

/*******************************/
// INPUT / OUTPUT

ifstream f("medie.in");
ofstream g("medie.out");
/*******************************/
/// GLOBAL DECLARATIONS

int N;
int ans;
int v[NMAX], cnt[2][MAX_NUM], freq[2 * MAX_NUM];
/*******************************/
/// FUNCTIONS

void ReadInput();
void Solution();
void Output();
/*******************************/
///-------------------------------------
inline void ReadInput()
{
    f >> N;

    for (int i = 1 ; i <= N ; ++ i) f >> v[i];
}
///-------------------------------------
inline void Solution()
{
    if (N < 3) return;
    for (int i = N ; i >= 2 ; -- i) cnt[1][v[i]] ++;

    int x1, x2;
    for (int i = 1 ; i <= N ; ++ i)
    {
        ans += freq[2 * v[i]];
        for (int diff = 0 ; diff < v[i] ; ++ diff)
        {
            x1 = v[i] - diff, x2 = v[i] + diff;
            if (x1 != x2)
            {
                ans += cnt[0][x1] * cnt[1][x2];
                ans += cnt[0][x2] * cnt[1][x1];  
            }
            else
            {
                ans += cnt[0][x1] * cnt[1][x1];
            }
        }

        for (int j = i - 1 ; j >= 1 ; -- j) freq[v[i] + v[j]] ++;

        cnt[0][v[i]] ++;
        cnt[1][v[i + 1]] --;
    }

    memset(freq, 0, sizeof(freq));

    for (int i = N ; i >= 1 ; -- i)
    {
        ans += freq[2 * v[i]];
        for (int j = i + 1 ; j <= N ; ++ j)
        {
            freq[v[i] + v[j]] ++;
        }
    }
}
///-------------------------------------
inline void Output()
{
    g << ans;
}
///-------------------------------------
int main()
{
    ReadInput();
    Solution();
    Output();
    return 0;
}