有乙個比賽已經有 n 個人參加,並且互相之間已經進行了比賽
每乙個人都有乙個得分用於最後排名
你作為第 n + 1 個參賽者,需要與之前的每乙個人打一場比賽,初始得分為 0
對於每場比賽,有兩個人參加,不會存在平局,勝者得分增加 1,敗者得分不變
最後按照得分從高到低來排名,假設有人與你最終得分相同
那麼如果那個人曾經輸給了你就會排在你後面,否則會排在你的前面
如果你贏了某個人,就需要消耗相應的 rp 值
現在你可以決定贏那些人,求最少需要消耗多少 rp 值才能到前k名
50分做法:還是列舉二進位制串……居然有50分
100分做法:
這個滿分做法是真的玄學,我們需要分三種情況討論來貪心求解:
如果乙個人的勝場和自己相同或者剛好少1,不打就會被擠下去,打了就可以公升一位
如果乙個人的勝場比自己多,打不打都沒什麼差異……
如果乙個人的勝場比自己少2或者更多,那就可以不用打了
然後貪心就好
**:
#include#define ll long long
#define maxn 2505
using namespace std;
int t,n,k,gol,num;
ll ans;
bool used[maxn];
struct people
p[maxn];
bool cmp1(people x, people y)
bool cmp2(people x, people y)
bool check()
ll work1()
for(register int i=1;i<=n&&num2;++i) }
for(register int i=1;i<=n&&num1;++i) }
for(register int i=1;i<=n&&cnt;++i) }
return ret;
}ll work2()
} for(register int i=1;i<=n&&cnt;++i) }
return ret;
}ll work3()
templateinline void read(t &res)
int main()
if(check())
sort(p+1,p+n+1,cmp1);
gol=p[k].p;
num=1;
while(p[k+num].p==p[k].p&&k+num<=n) ++num;
sort(p+1,p+n+1,cmp2);
ans=min(work1(),min(work2(),work3()));
printf("%lld\n",ans);
} return 0;
}
20191004機房測試 ZGY的早餐
zgy 每天早上要從宿舍走路到機房,順便從學校小賣部購買早飯,當然機智的 zgy 一定會走最短路 學校的路可以看成一無向聯通張圖,圖上有 n 個點,m 條邊,每乙個點都有乙個唯一的編號 1 n 每一條邊有乙個邊權,表示兩個點之間的距離,zgy 的宿舍在 s 點,機房在 t點,而小賣部在 h 點 現在...
模擬測試20191004
如果直接暴力建圖跑bfs時空複雜度都是 o n 的,考慮怎麼優化bfs的過程 我們發現主要瓶頸在於有許多點被掃到了多次 考慮用乙個set存剩下的點,由於每個點能走到的點在相同奇偶性下是連續的,我們把奇數和偶數分開來存 每次用乙個點擴充套件時找到他能走的區間,把這些點從set裡刪掉就好了 注意區間範圍...
機房 測試計畫
2 計畫 2.4測試2 識別符號 3 測試設計說明 3.2測試2 識別符號 4 評價準則 感謝閱讀 1.1編寫目的 測試計畫是描述將要進行測試活動的範圍 方法 資源和時間進度的文件。它確定了測試項,要測試的特徵 測試任務,誰來完成每一項任務及需要制定應急方案的所有風險等。目的就是盡可能多的找到系統中...