| ||||||||||
| 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 | |||||||||
大牛们帮我看看程序,为什么是Runtime error#include<iostream>
#include<string>
#include<string.h>
#define MAX_COUNT 100000
#define MAX_BUFF 20
const char table[]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9'};
using namespace std;
struct list{
list* pre;
string buf;
int num;
list* next;
};
void initList(list* l){
l->next=NULL;
l->pre=l;
};
void insert(list* h,list* a){
a->next = NULL;
h->pre->next = a;
a->pre=h->pre;
h->pre=a;
};
list* merge(list* head,list* h,int num){
initList(head);
list* temp;
for(int i=0;i<num-1;i++){
if(h[i].next==NULL)continue;
head->pre->next=h[i].next;
h[i].next->pre=head->pre;
head->pre=h[i].pre;
}
return head;
};
class Directory{
unsigned int m_number,m_Max;
string* m_buffer;
public:
Directory(int num=100):m_Max(num),m_number(0){
if(num>MAX_COUNT)m_Max=MAX_COUNT;
m_buffer=new string[m_Max];
};
string& regulize(string& a){
char buf[MAX_BUFF],buf2[MAX_BUFF];
strcpy(buf,a.c_str());
for(int i=0,j=0;buf[i]!=0;i++)if(buf[i]!='-'){
if(j==3)buf2[j++]='-';
if(buf[i]>'9'||buf[i]<'0')buf2[j++]=table[((buf[i]-'A')>26)?(buf[i]-'a'):(buf[i]-'A')];
else buf2[j++]=buf[i];
}
buf2[8]=0;
return a=buf2;
};
bool Input(string a){
if(m_number>=m_Max)return false;
else{
m_buffer[m_number]=regulize(a);
m_number++;
}
return true;
};
void output(){
string* temp=new string[m_number];
unsigned int* num = new unsigned int[m_number];
unsigned int count=0;
bool exist=false;
for(int i=0,j=0;i<m_number;i++){
for(j=0,exist=false;j<count;j++){
if(m_buffer[i]==temp[j]){
exist=true;
break;
}
}
if(!exist)temp[count]=m_buffer[i],num[count++]=1;
else num[j]++;
}
list List[10],listh,*tempp,*tempp2;
initList(&listh);
for(int i=0;i<count;i++){
tempp=new list;
tempp->buf=temp[i];
tempp->num=num[i];
insert(&listh,tempp);
}
for(int i=0;i<8;(++i)==4?i++:i){
for(int j=0;j<10;j++)initList(&List[j]);
for(tempp=listh.next;tempp!=NULL;){
tempp2=tempp;
tempp=tempp->next;
insert(&List[tempp2->buf.c_str()[7-i]-'0'],tempp2);
}
merge(&listh,List,10);
}
bool duplicates=false;
for(tempp=listh.next;tempp!=NULL;tempp=tempp->next){
if(tempp->num>1){
cout<<tempp->buf<<" "<<tempp->num;
if(tempp->next!=NULL)cout<<endl;
duplicates=true;
}
}
if(!duplicates)cout<<"No duplicates.";
for(tempp=listh.next;tempp!=NULL;tempp=tempp->next)delete tempp;
delete[] temp;
delete[] num;
};
~Directory(){
delete[] m_buffer;
};
};
int main(){
unsigned int count;
cin>>count;
string temp;
Directory dc(count);
for(int i=0;i<count;i++){
cin>>temp;
dc.Input(temp);
};
dc.output();
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator