演算法筆記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...