Gym 100820C 級別排序 )

2022-05-09 19:11:31 字數 1795 閱讀 2848

題意是說有一些人參加了不同級別的班,級別有 lower,middle,upper 三種,級別可以組合,出現比如 lower upper,middle upper 這種級別,級別的比較是從右往左,如果在一組比較中有的人的組合級別多,就以本組中級別最多的作為參照,其他人的級別要在左邊新增 middle 來補到一樣多。如果有人的級別是相等的,這些級別相等的人就按照名字的字典序排序。最後將排好序的名字依次輸出。

開始本人的做法是將 lower,middle,upper 分別變成 1,2,3,然後從右向左將每個人的級別寫成乙個十進位制的數,用 sort() 排序即可。

但是題中說每行不超過 256 個字元,也就是說級別數量會達到 50 個左右,寫成乙個數字很明顯是存不下的,然後就糊塗了,竟然開始考慮用 4 進製來存,其實這裡沒有進製,和十進位制是一樣的長度,而且繼續降低進製會反而將數字變長......

經高人指點,恍然大悟,原來可以直接開陣列去存每乙個數......

此外,在進行字典序排序的時候竟然不知道怎麼寫,其實可以直接比較 string 的,竟然還手寫去連續比較了幾位.......

題目**如下:

1

//#include 2//

#include 3//

#include 4//

using namespace std;5//

struct mem6//

stu[1052];

10//

int n;

11//

bool cmp(mem a,mem b)

12//

25//

int main()

26//

51//

else if(stu[i].al[j] == 'm')

52//

56//

else if(stu[i].al[j] == 'o')

57//

61//}62

//}63//

if(stu[i].cnt > big) big = stu[i].cnt;

64//}65

//for(int i = 0 ; i < n;i++)

66//

74//}75

//sort(stu,stu+n,cmp);

76//

for(int i = n-1 ; i >= 0; i--)

77//

cout << stu[i].name << endl;

78//

return 0;

79//

}80 #include81 #include82 #include83 #include84

using

namespace

std;

85struct

node

86 stu[1100

];91

bool cmp(struct node a,struct

node b)

9296

void rev(char *s,int

n)97

104}

105int

main()

106120

while(1

)121

128rev(stu[i].sco,cnt);

129}

130 sort(stu,stu+n,cmp);

131for(int i=0; i"

%s\n

",stu[i].name);

132return0;

133 }

view code

Gym 101291C 很有意思的最短路)

題意 給出一張地圖和機械人還有出口的位置,地圖上面有障礙。然後給出udlr上下左右四種指令,遇到障礙物或者越界的指令會忽略,剩下的繼續執行。只要到達出口就算找到出口,然後給你一串指令,讓你修改指令達到出口,刪除或插入任意乙個指令花費為1,問讓機械人能夠找到出口所花費最少。思路 感覺很有意思的一道最短...

c 毫秒級計時

建立乙個hiperftimer類實現毫秒級計時,如下 注意使用的命名空間 using system using system.runtime.interopservices using system.componentmodel using system.threading namespace 計時...

C 運算優先順序

precedence operator description example associativity1 grouping operator array access member access from a pointer member access from an object scopin...