20191004機房測試 C 錦標賽

2022-05-26 07:18:06 字數 1433 閱讀 2441

有乙個比賽已經有 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編寫目的 測試計畫是描述將要進行測試活動的範圍 方法 資源和時間進度的文件。它確定了測試項,要測試的特徵 測試任務,誰來完成每一項任務及需要制定應急方案的所有風險等。目的就是盡可能多的找到系統中...