題目連接node
這道題其實吧,水,咱們教練說過,不要看標籤,這只是CSP第一題的題目spa
思路嘛,priority_queue和貪心,就這樣,很水
這是代碼code
還有,必定要在cf上交,否則……能夠看一下提交記錄,有幾我的的代碼回來了get
#include <cstdio> #include <queue> #include <algorithm> using namespace std; const int MAXN = 1e6 + 5; inline int read(){ int k = 0,f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if (ch == '-'){ f = -1; } ch = getchar(); } while(ch >= '0' && ch <= '9'){ k = k * 10 + ch - '0'; ch = getchar(); } return k * f; } inline void write(int x){ if (x < 0){ putchar('-'); x = -x; } if (x > 9) write(x / 10); putchar(x % 10 + '0'); } struct node{ int cnt,num,id; node(){} node(int Cnt,int Num){ cnt = Cnt,num = Num; } bool operator <(const node& a) const{ return cnt < a.cnt; } }a[MAXN]; priority_queue <node> q; int cnt = 1; int ans; struct ball{ int big,mid,sma; }k[MAXN]; bool cmp(node x,node y){ return x.num < y.num; } int main(){ int n; n = read(); for (int i = 1; i <= n ; i++) a[i].num = read(); sort(a + 1,a + 1 + n,cmp); for (int i = 1; i <= n; i++){ if (a[i].num != a[i + 1].num){ q.push(node(cnt,a[i].num)); cnt = 1; } else cnt++; } if (q.size() < 3){ printf("0"); return 0; } while(q.size() >= 2){ node x = q.top();q.pop(); node y = q.top();q.pop(); node z = q.top();q.pop(); x.cnt--,y.cnt--,z.cnt--; k[++ans].big = x.num; k[ans].mid = y.num; k[ans].sma = z.num; if (x.cnt) q.push(node(x.cnt,x.num)); if (y.cnt) q.push(node(y.cnt,y.num)); if (z.cnt) q.push(node(z.cnt,z.num)); } write(ans); putchar(10); for (int i = 1 ; i <= ans ; i++){ int m[5]; m[1] = k[i].big; m[2] = k[i].mid; m[3] = k[i].sma; sort(m + 1,m + 4); printf("%d %d %d\n",m[3],m[2],m[1]); } return 0; }