Ideas:
Para ideas no convencionales, primero diseñe la estructura de datos de modo que los registros se registren al ingresar y luego se clasifiquen o generen directamente al realizar consultas.
1153 Decodificar tarjeta de registro de PAT (25 punto (s))
Un número de tarjeta de registro de PAT consta de 4 partes:
- la 1ª letra representa el nivel de prueba, es decir,
T
para el nivel superior,A
para avanzado yB
para básico; - los dígitos 2º al 4º son el número del sitio de prueba, con un rango de 101 a 999;
- los dígitos del quinto al décimo dan la fecha de la prueba, en forma de
yymmdd
; - finalmente, los dígitos del 11 al 13 son el número del examinado, que van de 000 a 999.
Ahora, dado un conjunto de números de tarjeta de registro y las puntuaciones de los propietarios de la tarjeta, se supone que debe generar las diversas estadísticas de acuerdo con las consultas dadas.
Ejemplo:
#include<iostream>
#include<vector>
#include<cstring>
#include<map>
#include<set>
using namespace std;
int main()
{
int N, M;
cin >> N >> M;
map<char, map<int, set<string>>> Type1;
map<int, pair<int, int>> Type2;
map<int, map<int, int>> Type3;
for(int i = 0; i < N; i++) {
string id;
int score;
cin >> id >> score;
Type1[id[0]][score].insert(id);
int site = atoi(id.substr(1, 3).c_str());
Type2[site].first++;
Type2[site].second += score;
int date = atoi(id.substr(4, 6).c_str());
Type3[date][site]++;
}
for(int i = 1; i <= M; i++) {
printf("Case %d: ", i);
int type;
cin >> type;
if(type == 1) {
char term;
cin >> term;
printf("%d %c\n", type, term);
if(Type1.count(term) != 0) {
for(auto x = Type1[term].rbegin(); x != Type1[term].rend(); x++) {
for(auto y : x->second) {
printf("%s %d\n", y.c_str(), x->first);
}
}
continue;
}
} else if(type == 2) {
char temp[4];
cin >> temp;
printf("%d %s\n", type, temp);
int term = atoi(temp);
if(Type2.count(term) != 0) {
printf("%d %d\n", Type2[term].first, Type2[term].second);
continue;
}
} else if(type == 3) {
char temp[8];
cin >> temp;
printf("%d %s\n", type, temp);
int term = atoi(temp);
if(Type3.count(term) != 0 && Type3[term].size() > 0) {
map<int, set<int>> result;
for(auto x: Type3[term]) {
result[x.second].insert(x.first);
}
for(auto x = result.rbegin(); x != result.rend(); x++) {
for(auto y : x->second) {
printf("%03d %d\n", y, x->first);
}
}
continue;
}
} else {
char term[20];
cin >> term;
printf("%d %s\n", type, term);
}
cout << "NA\n";
}
}