存疑pata1025 已解決)排名

2021-10-19 22:25:25 字數 1713 閱讀 4742

演算法筆記105頁

我的方法是只排一次名

#include

#include

#include

using

namespace std;

//思路: 在輸入時記錄學校,全輸入完成後統一排序,計算排名。

//排名分為兩類,總排名i.fr和學校排名i.sch.lr。累計(算人次)排名fr和當前(算不同成績個數)排名sch.lr。

//總排名累計:直接fr++;

//學校累計:lr[i.sch]++;

//當前:需找到前乙個分數相同的名次,

//總排名當前:若當前[i]成績==[i-1]的成績, 則i.fr=[i-1].fr;

//學校當前: 用samesch[i.sch]=lr; 記錄當前最低分的本校排名,當與上一位[i-1]成績相等時,再判斷本校上一名的成績是否也相等

// 主要是samesch陣列,儲存的內容:某學校的最低分是否==總的最低分,及更新的條件:因為最低分時時在變,所以需要清零更新。

struct infostu[

30000];

bool

cmp(info a,info b)

}int

main()

}int lr[n+1]

=,fr=1;

int samesch[

300]=;

//存放當前(最低分)分數相等的所有學校 ,當總排名分數不等時,全部更新為0;

sort

(stu,stu+cnt,cmp)

;for

(int i=

0;i)else

else

}else

} fr++

; lr[stu[i]

.sch]++;

}printf

("%d\n"

,cnt)

;for

(int i=

0;i)return0;

}

用書上方法竟然出錯了,但不知錯在**。

這裡不應該是i

#include

#include

#include

using

namespace std;

struct infostu[

30000];

bool

cmp(info a,info b)

}int

main()

sort

(stu+num-m,stu+num,cmp)

;for

(int i=

0;i)else stu[num-m+i]

.lr=0;

} j++;}

sort

(stu,stu+num,cmp)

;int fr=1;

printf

("%d\n"

,num)

;for

(int i=

0;i)printf

("%s %d %d %d\n"

,stu[i]

.id,fr,stu[i]

.lm,stu[i]

.lr+1)

;}return0;

}

存疑201703(已解決)map的使用

問題 經檢驗 map使用沒有問題,find查詢,直接mp t0 得到鍵值都沒有問題。問題 1,字元判斷空格和換行結束的問題。原因字串str壓根不會輸入 n 換行符。所以用長度判斷終止。2,在使用gets getline時,如果前面使用過scanf,cin。則需要吸收換行符。問題3,成員層次還沒算對。...

存疑607A(已解決)操作沒有輸出就結束了

題目 問題 操作沒有輸出就結束了,以及輸入m 4,但輸入3個操作就結束了。改正 char 陣列的比較 strcmp if temp show 問題2 get函式的輸出for i 0 p null i include include struct node node create int array,...

存疑578B(已解決)月份一一對應

題目 注意 字串使用char month 13 13 中間使用雙引號和逗號。單引號不可以 if while使用錯誤,num沒有清零,d0與num位置寫錯。問題二,時間超限,答案錯誤。問題 if d0 ym isleap y m0 1 april may june july august septem...