J - Parallelograms

There are n sticks, the i-th of which has length ai. Alex wants to assemble from them as many parallelograms as possible simultaneously, with each stick used at most in one parallelogram. What maximal number of parallelograms is it possible to assemble?
Input
The first line contains a single integer n (1 ≤ n ≤ 200000) — the number of sticks.

The second line contains n integers ai (1 ≤ ai ≤ 200000) — the lengths of sticks.
Output
Output a single integer — the maximal number of parallelograms that is possible to assemble.
Examples
Input
4
1 2 1 2
Output
1
Input
12
1 3 5 7 1 3 5 7 1 3 5 7
Output
2
思路:剛開始想把不同的邊及數目都存放在數組中,之後先循環第一遍把所以邊數>=4的都減去能組成菱形的邊的個數,再循環第二遍判斷是普通平行四邊形的個數,結果wa了。後來改成了只統計每個邊的個數,如果是奇數就剪掉以,因爲組成平行四邊形得用兩條或四條。

#include<bits/stdc++.h>
using namespace std;
const int maxx=2e5+10;
int a[maxx];
int main()
{
    std::ios::sync_with_stdio(false);

    long long int n,x;
    cin>>n;
    memset(a,0,sizeof(a));
   for(int i=0;i<n;i++)
   {
       cin>>x;
       a[x]++;
   }
    long long int sum=0;
    for(int i=1; i<maxx; i++)
    {
        if(a[i]&&a[i]%2!=0)
            a[i]--;
        sum+=a[i];
    }
    cout<<sum/4<<endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章