題意是說有一些人參加了不同級別的班,級別有 lower,middle,upper 三種,級別可以組合,出現比如 lower upper,middle upper 這種級別,級別的比較是從右往左,如果在一組比較中有的人的組合級別多,就以本組中級別最多的作為參照,其他人的級別要在左邊新增 middle 來補到一樣多。如果有人的級別是相等的,這些級別相等的人就按照名字的字典序排序。最後將排好序的名字依次輸出。
開始本人的做法是將 lower,middle,upper 分別變成 1,2,3,然後從右向左將每個人的級別寫成乙個十進位制的數,用 sort() 排序即可。
但是題中說每行不超過 256 個字元,也就是說級別數量會達到 50 個左右,寫成乙個數字很明顯是存不下的,然後就糊塗了,竟然開始考慮用 4 進製來存,其實這裡沒有進製,和十進位制是一樣的長度,而且繼續降低進製會反而將數字變長......
經高人指點,恍然大悟,原來可以直接開陣列去存每乙個數......
此外,在進行字典序排序的時候竟然不知道怎麼寫,其實可以直接比較 string 的,竟然還手寫去連續比較了幾位.......
題目**如下:
1view code//#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 }
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...