重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
在某次競賽中,判題規則是按解題數從多到少排序,在解題數相同的情況下,按總成績(保證各不相同)從高到低排序,取排名前60%的參賽隊(四舍五入取整)獲獎,請確定某個隊能否獲獎。
首先輸入一個正整數T,表示測試數據的組數,然后是T組測試數據。每組測試的第一行輸入1個整數n(1≤n≤15)和1個字符串ms(長度小于10且不含空格),分別表示參賽隊伍總數和想確定是否能獲獎的某個隊名;接下來的n行輸入n個隊的解題信息,每行一個1個字符串s(長度小于10且不含空格)和2個整數m,g(0≤m≤10,0≤g≤100),分別表示一個隊的隊名、解題數、成績。當然,n個隊名中肯定包含ms。
輸出格式:對于每組測試,若某隊能獲獎,則輸出“YES”,否則輸出“NO”。引號不必輸出。
輸入樣例:1
3 team001
team001 2 27
team002 2 28
team003 0 7
輸出樣例:YES
來源:[1] 黃龍軍, 等. 大學生程序設計競賽入門—C/C++程序設計(微課視頻版), 北京:清華大學出版社, 2020.11. ISBN:9787302564744
[2] 黃龍軍.程序設計競賽入門(Python版),北京:清華大學出版社,2021.4. ISBN:9787302571230
我的想法是用快排來做,這題不難
#include#includetypedef struct paimin
{
char name[11];
int jt, fs;
} pm;
int cmp(void const *a, void const *b)//這是快排cmp函數的固定格式不能更改,所以函數內引用結構體的時候需要強轉
{
if (((pm *)a)->jt - ((pm *)b)->jt)
return ((pm *)a)->jt< ((pm *)b)->jt ? 1 : -1;
else
return ((pm *)a)->fs< ((pm *)b)->fs ? 1 : -1;
}
int main()
{
char ms[11];
int N, n, i;
scanf("%d", &N);
while (N--)
{
scanf("%d%s\n", &n, ms);//這里用\n接收掉第一行的回車避免后面輸入臟數據
pm s[15];
for (i = 0; i< n; i++)
scanf("%s%d%d", s[i].name, &s[i].jt, &s[i].fs);
qsort(s, n, sizeof(pm), cmp);//快排的調用
n = (n * 0.6)-(int)(n * 0.6)>0.5?(int)(n * 0.6)+1:(int)(n * 0.6);//四舍五入的大概原理就是判斷這個實數的小數部分是否>0.5是則強轉int并+1不是則強轉int輸出
for (i = 0; i< n; i++)//通過上面n*0.6獲得n個數排序以后前60%個數,并從中遍歷如果發現與ms相同的隊名則證明ms可以獲獎
if (!strcmp(s[i].name, ms))
break;
if (i< n)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧