牛客多校第四場G Maximum Mode(模擬)

2021-08-22 13:39:49 字數 955 閱讀 7845

題目大意:

給出乙個n個數的序列,我們可以刪除m個數,然後我們要求出現次數最多並且最大的,

也就是如果出現次數最多的有多個,那就必須刪除其他的數,避免出現次數最大的有多個,然後我們要求值最大,所以我們還要盡量判斷值大的 

題目思路:

首先我們先明確我們要取什麼數:1.次數最多並且值最大的;2.且最大值唯一,要把不能有多個次數相同

既然我們要取次數最多並且值最大的,如果我們取當前這個數的話,我們肯定出現次數相同還有重複的話,我們優先肯定是取最大的,但是我們又要把所有次數比他多的刪掉,因為取這個數就代表當前這個數的出現次數最多,但是我們不知道哪些比它多,我們直接遍歷的話會超限,所以我們貪心,先用map記錄下每個數出現的次數,然後我們用迭代器遍歷,按次數最多的排前,然後次數相等的把大的排後面(因為我們是按次數從大到小排的,所以我們要把前面那些次數比當前位置多的都減成比他小,但是相同次數的時候我們取值大的,所以次數相等的時候按值的公升序排)

#includeusing namespace std;

typedef long long ll;

const int maxn=100000+100;

struct node

b[maxn];

ll n,m;

mapmp;

ll a[maxn];

int cnt;

bool cmp(node q,node w)

int main()

sort(b,b+cnt,cmp);

ll sum=0;

int flag=0;

ll num;

for(int i=0;inum)}}

sum+=b[i].num;}}

if(!flag)printf("-1\n");

else printf("%lld\n",num);

}return 0;

}

free(牛客多校第四場)

free 本題可以通過常規的最短路演算法改變來得到,通過在最短路演算法中加乙個長度為k的迴圈,判斷k條路免費後的最小權值即可。include include include include include include include include include define inf 0x3f...

2019牛客多校第四場 D triples I

對於二進位制每一位上的1進行考慮,2 0 3 1 2 1 3 2 2 2 3 1 2 3 3 2 那麼我們可以想到把a轉化為二進位制,然後他 3 1的位數有cnt1個,3 2的位數有cnt2個。我們可以想到每個數字最多由2個數字組成,下面給出證明。那麼 sum a 3,如果sum 0,那麼直接乙個數...

2019牛客多校第四場 A meeting

考場上寫了一大坨樹形dp,寫的時候就感覺我這不是跟求樹的最長鏈寫的一毛一樣 然後考後看題解,果然是k個ren所連成的子樹的最長鏈的一半 可以利用反證法證明,如果在長度為d的最長鏈的中間放乙個中心,如果有另外乙個點到這個點的長度 d 1 2,那麼這個點到對面的那個點的長度大於d,所以不存在這樣乙個點。...