| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
又是个STL满地跑的题,0ms,数据很弱#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
struct sec{
vector<int> pages;
};
struct pri{
vector<int> pages;
vector<string> secVec;
map<string, sec> secIdx;
};
char toLr(char c){
if(c >= 'A' && c <= 'Z') return c-'A'+'a';
return c;
}
bool smaller(string &s1, string &s2){
int l1 = s1.length(), l2 = s2.length();
for(int i = 0; i < l1 && i < l2; i++){
if(toLr(s1[i]) < toLr(s2[i])) return 1;
if(toLr(s1[i]) > toLr(s2[i])) return 0;
}
if(l1 < l2) return 1;
return 0;
}
void sort(vector<string> &vs){
int sz = vs.size();
for(int i = 1; i < sz; i++){
for(int j = i; j > 0; j--){
if(smaller(vs[j-1], vs[j])) break;
string tmp = vs[j-1];
vs[j-1] = vs[j];
vs[j] = tmp;
}
}
}
int main() {
string s;
int docuNo = 1;
while(1){
//cout << "DOCUMENT " << docuNo << endl;
bool firstLine = 1;
int page = 1;
bool inIdx = 0;
bool hasPri = 0, hasSec = 0;
string tempIdxCont = "";
map<string, pri> priIdx;
vector<string> priVec;
while(1){
getline(cin, s);
if(s == "**") return 0;
if(firstLine) cout << "DOCUMENT " << docuNo << endl;
firstLine = 0;
if(s == "*"){
//统计,并输出之
sort(priVec);
int sz = priVec.size();
for(int i = 0; i < sz; i++){
string searchPri = priVec[i];
pri& Pri = priIdx[searchPri];
cout << searchPri;
int pg = -1;
for(int j = 0; j < Pri.pages.size(); j++){
if(Pri.pages[j] != pg){
cout << ", " << Pri.pages[j];
pg = Pri.pages[j];
}
}
cout << endl;
if(!Pri.secVec.empty()){
sort(Pri.secVec);
int szz = Pri.secVec.size();
for(int j = 0; j < szz; j++){
sec& Sec = Pri.secIdx[Pri.secVec[j]];
cout << "+ " << Pri.secVec[j];
int pgg = -1;
for(int k = 0; k < Sec.pages.size(); k++){
if(Sec.pages[k] != pgg){
cout << ", " << Sec.pages[k];
pgg = Sec.pages[k];
}
}
cout << endl;
}
}
}
break;
}
else{
s += " ";
int len = s.length();
int plc = 0;
while(plc < len){
char c = s[plc];
if(c == '&') {
page++;
}
else if(c == '{'){
tempIdxCont = "";
hasPri = 0;
hasSec = 0;
inIdx = 1;
}
else if(c == '}'){
inIdx = 0;
int l = tempIdxCont.length();
//处理这个index
if(!hasPri && !hasSec){
int first, last;
for(first = 0; first < l; first++){
if(tempIdxCont[first] != ' ') break;
}
if(first == l) continue;
for(last = l-1; last >= 0; last--){
if(tempIdxCont[last] != ' ') break;
}
tempIdxCont = tempIdxCont.substr(first, last-first+1);
map<string, pri>::iterator it = priIdx.find(tempIdxCont);
if(it == priIdx.end()){
pri temp;
temp.pages.push_back(page);
priIdx.insert(pair<string, pri>(tempIdxCont, temp));
priVec.push_back(tempIdxCont);
}
else{
it->second.pages.push_back(page);
}
}
if(hasPri && !hasSec){
int bfhP;
for(bfhP = 0; bfhP < l; bfhP ++){
if(tempIdxCont[bfhP] == '%') break;
}
int first = bfhP+1, last = l-1;
while(tempIdxCont[first] == ' ') first++;
while(tempIdxCont[last] == ' ') last--;
tempIdxCont = tempIdxCont.substr(first, last-first+1);
map<string, pri>::iterator it = priIdx.find(tempIdxCont);
if(it == priIdx.end()){
pri temp;
temp.pages.push_back(page);
priIdx.insert(pair<string, pri>(tempIdxCont, temp));
priVec.push_back(tempIdxCont);
}
else{
it->second.pages.push_back(page);
}
}
if(hasSec){
string priStr = "", secStr = "";
if(!hasPri){
int dP;
for(dP = 0; dP < l; dP ++){
if(tempIdxCont[dP] == '$') break;
}
int first = 0, last = dP-1;
while(tempIdxCont[first] == ' ') first++;
while(tempIdxCont[last] == ' ') last--;
priStr = tempIdxCont.substr(first, last-first+1);
first = dP+1, last = l-1;
while(tempIdxCont[first] == ' ') first++;
while(tempIdxCont[last] == ' ') last--;
secStr = tempIdxCont.substr(first, last-first+1);
}
else{
int dP, dBFH;
for(dP = 0; dP < l; dP ++){
if(tempIdxCont[dP] == '$') break;
}
for(dBFH = 0; dBFH < l; dBFH++){
if(tempIdxCont[dBFH] == '%') break;
}
int first = dBFH+1, last = dP-1;
while(tempIdxCont[first] == ' ') first++;
while(tempIdxCont[last] == ' ') last--;
priStr = tempIdxCont.substr(first, last-first+1);
first = dP+1, last = l-1;
while(tempIdxCont[first] == ' ') first++;
while(tempIdxCont[last] == ' ') last--;
secStr = tempIdxCont.substr(first, last-first+1);
}
map<string, pri>::iterator it = priIdx.find(priStr);
if(it == priIdx.end()){
priVec.push_back(priStr);
pri temp;
sec tmp;
tmp.pages.push_back(page);
temp.secVec.push_back(secStr);
temp.secIdx.insert(pair<string, sec>(secStr, tmp));
priIdx.insert(pair<string, pri>(priStr, temp));
}
else{
pri& thisPri = it->second;
map<string, sec>::iterator itt = thisPri.secIdx.find(secStr);
if(itt == thisPri.secIdx.end()){
sec tmp;
tmp.pages.push_back(page);
thisPri.secIdx.insert(pair<string, sec>(secStr, tmp));
thisPri.secVec.push_back(secStr);
}
else{
sec& thisSec = itt->second;
thisSec.pages.push_back(page);
}
}
}
}
else if(inIdx){
tempIdxCont += c;
if(c == '%') hasPri = 1;
if(c == '$') hasSec = 1;
}
plc++;
}
}
}
docuNo ++;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator