2026百度之星初赛第一场第3题(贪心) 题目链接码蹄集OJ-投票选举题目大意给定一个a数组其中-1表示票数未知总票为n求出最高票数的同学的可能编号(恰好只有1位)题目思路我们先求出已知ma以及已知已知sum和然后求出未知可用票数dn-sum,如果dma,那么毋庸置疑最大票数只能是ma如果dma,那么最大票数可能在已知最大中也可能在未知中对于未知数组中我们可以让一人获得d票其余人全0票那么每个位置都可能是ans接下来我们要考虑ans是否在已知ma中那么我们可以最小化未知最大值也就xdunknow_cnt-1)/unknown_cnt,如果xma说明x就是全局最大值ma不计入ans如果xma,此时会出现至少两个最大值也不计入如果xma,此时如果ma的数量1才计入ans代码如下#include bits/stdc.h using namespace std; using i128 __int128; #define int long long #define endl \n void solve() { int n; cin n; int a[n 1]; int ma 0; int pos 0; int sum 0; int unknow_cnt 0; for (int i 1; i n;i){ cin a[i]; if(a[i]!-1){ sum a[i]; }else{ unknow_cnt; } if(a[i]ma){ ma a[i]; pos i; } } int ma_cnt 0; for (int i 1; i n;i){ if(a[i]ma){ ma_cnt; } } int d n - sum; int ok1; if(dma){ int x (d unknow_cnt - 1) / unknow_cnt; if(xmama_cnt1){ for (int i 1; i n;i){ if(a[i]-1){ if(posiok){ cout pos i ; ok0; }else{ cout i ; } } } }else{ for (int i 1; i n;i){ if(a[i]-1){ cout i ; } } } }else{ cout pos endl; } } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T 1; // cin T; while (T--) { solve(); } return 0; }