755 - 487--3279
Moderator: Board moderators
755 - 487--3279
Can someone tell me why this WAs?
[cpp]
#include <stdio.h>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
void main()
{
string Translation="ABCDEFGHIJKLMNOPRSTUVWXY";
map<string,int> Directory;
map<string,int>::iterator DirectoryIT;
char B[1000];
char C[10];
int i,j,N,k,O;
O=0;
scanf("%*d");
while(scanf("%d",&N)!=EOF)
{
if(O++)
{
printf("\n");
}
Directory.clear();
for(i=0;i<N;i++)
{
scanf("%s",B);
k=0;
for(j=0;j<strlen(B);j++)
{
if(isdigit(B[j]))
{
C[k++]=B[j];
}
if(isalpha(B[j]))
{
C[k++]=(find(Translation.begin(),Translation.end(),B[j])-Translation.begin())/3+2+'0';
}
}
C[k++]='\0';
Directory[C]++;
}
k=0;
for(DirectoryIT=Directory.begin();DirectoryIT!=Directory.end();DirectoryIT++)
{
if((*DirectoryIT).second>1)
{
k++;
printf("%s-%s %d\n",(*DirectoryIT).first.substr(0,3).c_str(),(*DirectoryIT).first.substr(3,4).c_str(),(*DirectoryIT).second);
}
}
if(k==0)
{
printf("No duplicates.\n");
}
}
}[/cpp]
[cpp]
#include <stdio.h>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
void main()
{
string Translation="ABCDEFGHIJKLMNOPRSTUVWXY";
map<string,int> Directory;
map<string,int>::iterator DirectoryIT;
char B[1000];
char C[10];
int i,j,N,k,O;
O=0;
scanf("%*d");
while(scanf("%d",&N)!=EOF)
{
if(O++)
{
printf("\n");
}
Directory.clear();
for(i=0;i<N;i++)
{
scanf("%s",B);
k=0;
for(j=0;j<strlen(B);j++)
{
if(isdigit(B[j]))
{
C[k++]=B[j];
}
if(isalpha(B[j]))
{
C[k++]=(find(Translation.begin(),Translation.end(),B[j])-Translation.begin())/3+2+'0';
}
}
C[k++]='\0';
Directory[C]++;
}
k=0;
for(DirectoryIT=Directory.begin();DirectoryIT!=Directory.end();DirectoryIT++)
{
if((*DirectoryIT).second>1)
{
k++;
printf("%s-%s %d\n",(*DirectoryIT).first.substr(0,3).c_str(),(*DirectoryIT).first.substr(3,4).c_str(),(*DirectoryIT).second);
}
}
if(k==0)
{
printf("No duplicates.\n");
}
}
}[/cpp]
-
- New poster
- Posts: 14
- Joined: Sun May 26, 2002 1:54 pm
- Location: China
755
I couldn't understand why i got RE(SIGSEGV)!
Is there anything i have not mentioned?
![:(](./images/smilies/icon_frown.gif)
Is there anything i have not mentioned?
![:(](./images/smilies/icon_frown.gif)
![:(](./images/smilies/icon_frown.gif)
![:(](./images/smilies/icon_frown.gif)
-
- A great helper
- Posts: 284
- Joined: Thu Feb 28, 2002 2:00 am
- Location: Germany
- Contact:
-
- New poster
- Posts: 14
- Joined: Sun May 26, 2002 1:54 pm
- Location: China
-
- A great helper
- Posts: 284
- Joined: Thu Feb 28, 2002 2:00 am
- Location: Germany
- Contact:
-
- New poster
- Posts: 14
- Joined: Sun May 26, 2002 1:54 pm
- Location: China
-
- New poster
- Posts: 14
- Joined: Sun May 26, 2002 1:54 pm
- Location: China
755 why p.e.?
Why I have presentation error, I think I handle multiple input correctly...
[cpp]
#include <stdio.h>
#include <string.h>
int tel[100000];
int ile[200000];
int ileI[200000];
int odp[50001];
int odp2[50001];
void QSort(int left, int right)
{
}
bool getC(char z,int &c)
{
if ((z>='0')&&(z<='9')) { c = z-'0'; return true; }
switch (z)
{
case 'A':
case 'B':
case 'C': c = 2; return true;
case 'D':
case 'E':
case 'F': c = 3; return true;
case 'G':
case 'H':
case 'I': c = 4; return true;
case 'J':
case 'K':
case 'L': c = 5; return true;
case 'M':
case 'N':
case 'O': c = 6; return true;
case 'P':
case 'R':
case 'S': c = 7; return true;
case 'T':
case 'U':
case 'V': c = 8; return true;
case 'W':
case 'X':
case 'Y': c = 9; return true;
}
return false;
}
int getInx(int nr)
{
}
int getNum(char *txt)
{
int res = 0,c,i;
int nLen = strlen(txt);
for (i=0;i<nLen;i++)
if (getC(txt,c))
{
res*=10;
res+=c;
}
return res;
}
void printOdp(int a,int b)
{
char c[8];
int i;
for (i=0;i<8;i++)
{
c = a%10;
a/=10;
}
for (i=6;i>=4;i--) printf("%c",'0'+c);
printf("-");
for (i=3;i>=0;i--) printf("%c",'0'+c);
printf(" %ld\n",b);
}
void main()
{
int i;
int n;
char tels[200];
bool bFirst = true;
while (scanf("%d\n",&n)!=EOF)
{
if (!bFirst) printf("\n");
bFirst = false;
for (i=0;i<200000;i++)
{
ile =0;
ileI=-1;
}
for (i=0;i<n;i++)
{
scanf("%s\n",tels);
tel = getNum(tels);
}
for (i=0;i<n;i++)
{
int num = tel;
int inx = getInx(num);
ileI[inx] = num;
ile[inx]++;
}
int ileOdp = 0;
for (i=0;i<n;i++)
{
int num = tel;
int inx = getInx(num);
if (ile[inx]>1)
{
odp[ileOdp] = num;
odp2[ileOdp++] = ile[inx];
}
ile[inx] = 0;
}
if (ileOdp==0)
{
printf("No duplicates.\n");
}
else
{
QSort(0,ileOdp-1);
for (i=0;i<ileOdp;i++) printOdp(odp,odp2[i]);
}
}
}
[/cpp]
[cpp]
#include <stdio.h>
#include <string.h>
int tel[100000];
int ile[200000];
int ileI[200000];
int odp[50001];
int odp2[50001];
void QSort(int left, int right)
{
![:wink:](./images/smilies/icon_wink.gif)
}
bool getC(char z,int &c)
{
if ((z>='0')&&(z<='9')) { c = z-'0'; return true; }
switch (z)
{
case 'A':
case 'B':
case 'C': c = 2; return true;
case 'D':
case 'E':
case 'F': c = 3; return true;
case 'G':
case 'H':
case 'I': c = 4; return true;
case 'J':
case 'K':
case 'L': c = 5; return true;
case 'M':
case 'N':
case 'O': c = 6; return true;
case 'P':
case 'R':
case 'S': c = 7; return true;
case 'T':
case 'U':
case 'V': c = 8; return true;
case 'W':
case 'X':
case 'Y': c = 9; return true;
}
return false;
}
int getInx(int nr)
{
![:wink:](./images/smilies/icon_wink.gif)
}
int getNum(char *txt)
{
int res = 0,c,i;
int nLen = strlen(txt);
for (i=0;i<nLen;i++)
if (getC(txt,c))
{
res*=10;
res+=c;
}
return res;
}
void printOdp(int a,int b)
{
char c[8];
int i;
for (i=0;i<8;i++)
{
c = a%10;
a/=10;
}
for (i=6;i>=4;i--) printf("%c",'0'+c);
printf("-");
for (i=3;i>=0;i--) printf("%c",'0'+c);
printf(" %ld\n",b);
}
void main()
{
int i;
int n;
char tels[200];
bool bFirst = true;
while (scanf("%d\n",&n)!=EOF)
{
if (!bFirst) printf("\n");
bFirst = false;
for (i=0;i<200000;i++)
{
ile =0;
ileI=-1;
}
for (i=0;i<n;i++)
{
scanf("%s\n",tels);
tel = getNum(tels);
}
for (i=0;i<n;i++)
{
int num = tel;
int inx = getInx(num);
ileI[inx] = num;
ile[inx]++;
}
int ileOdp = 0;
for (i=0;i<n;i++)
{
int num = tel;
int inx = getInx(num);
if (ile[inx]>1)
{
odp[ileOdp] = num;
odp2[ileOdp++] = ile[inx];
}
ile[inx] = 0;
}
if (ileOdp==0)
{
printf("No duplicates.\n");
}
else
{
QSort(0,ileOdp-1);
for (i=0;i<ileOdp;i++) printOdp(odp,odp2[i]);
}
}
}
[/cpp]
755 Need help
I've just wonder why this code gets WA
It's only simple merge sort
[pascal]Program p755;
Const MaxN = 110000;
LDig : Array['A'..'Z']of Integer = ( 2, 2, 2,
3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6,
7, 0, 7, 7, 8, 8, 8, 9, 9, 9, 0 );
Var T,tt,i : Integer;
p,j,k,c : Integer;
Amount : Array[1..MaxN]of Integer;
Tmp : Array[0..MaxN]of Integer;
Procedure ReadPhone(Var Ph : Integer);
Var S : String;
Ch : Char;
i : Integer;
begin
S:='';
While (Not Eoln) And (Not Eof) do begin
Read(Ch);
if Ch in ['0'..'9'] then S:=S+Ch;
if (Ch in ['A'..'Z']) And (Ch<>'Q') And (Ch<>'Z') then S:=S+Ch;
end;
Readln;
Ph:=0;
for i:=1 to length(S) do
if S in ['A'..'Z'] then
Ph:=Ph*10+LDig[S]
else
Ph:=Ph*10+Ord(S)-Ord('0');
end;
Procedure WritePhone(Ph,c : Integer);
Var i : Integer;
S : String;
begin
j:=j+1;
Str(Ph,S);
While length(S)<7 do S:='0'+S;
for i:=1 to 3 do Write(S);
Write('-');
for i:=4 to 7 do Write(S);
Writeln(' ',c);
end;
Procedure Swap(Var A1,A2 : integer);
Var t : integer;
begin
t:=A1;
A1:=A2;
A2:=t;
end;
Procedure Merge(left,middle,rigth : integer);
Var Ileft,Irigth,Cur,i : integer;
begin
Ileft:=left;
Irigth:=middle+1;
Cur:=0;
While True do begin
Cur:=Cur+1;
if Amount[Ileft]<Amount[Irigth] then begin
Tmp[Cur]:=Amount[Ileft];
Ileft:=Ileft+1;
end else begin
Tmp[Cur]:=Amount[Irigth];
Irigth:=Irigth+1;
end;
if Ileft=middle+1 then begin
for i:=Irigth to rigth do begin
Cur:=Cur+1;
Tmp[Cur]:=Amount;
end;
break;
end;
if Irigth=rigth+1 then begin
for i:=Ileft to middle do begin
Cur:=Cur+1;
Tmp[Cur]:=Amount;
end;
break;
end;
end;
for i:=1 to rigth-left+1 do
Amount[left+i-1]:=Tmp;
end;
Procedure MergeSort(left,rigth : integer);
Var middle : integer;
begin
if rigth-left<=0 then exit;
if rigth-left=1 then begin
if Amount[left]>Amount[rigth] then
Swap(Amount[left],Amount[rigth]);
exit;
end;
middle:=(left + rigth) div 2;
MergeSort(left,middle);
MergeSort(middle+1,rigth);
Merge(left,middle,rigth);
end;
begin
Readln(T);
for tt:=1 to T do begin
Readln;
Readln(k);
for i:=1 to k do begin
ReadPhone(j);
Amount:=j;
end;
j:=0;
MergeSort(1,k);
p:=-1;
c:=0;
for i:=1 to k do
if Amount=p then begin
c:=c+1;
end else begin
if c>1 then WritePhone(p,c);
c:=1;
p:=Amount[i];
end;
if j=0 then Writeln('No duplicates.');
Writeln;
end;
end.[/pascal]
![:(](./images/smilies/icon_frown.gif)
It's only simple merge sort
[pascal]Program p755;
Const MaxN = 110000;
LDig : Array['A'..'Z']of Integer = ( 2, 2, 2,
3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6,
7, 0, 7, 7, 8, 8, 8, 9, 9, 9, 0 );
Var T,tt,i : Integer;
p,j,k,c : Integer;
Amount : Array[1..MaxN]of Integer;
Tmp : Array[0..MaxN]of Integer;
Procedure ReadPhone(Var Ph : Integer);
Var S : String;
Ch : Char;
i : Integer;
begin
S:='';
While (Not Eoln) And (Not Eof) do begin
Read(Ch);
if Ch in ['0'..'9'] then S:=S+Ch;
if (Ch in ['A'..'Z']) And (Ch<>'Q') And (Ch<>'Z') then S:=S+Ch;
end;
Readln;
Ph:=0;
for i:=1 to length(S) do
if S in ['A'..'Z'] then
Ph:=Ph*10+LDig[S]
else
Ph:=Ph*10+Ord(S)-Ord('0');
end;
Procedure WritePhone(Ph,c : Integer);
Var i : Integer;
S : String;
begin
j:=j+1;
Str(Ph,S);
While length(S)<7 do S:='0'+S;
for i:=1 to 3 do Write(S);
Write('-');
for i:=4 to 7 do Write(S);
Writeln(' ',c);
end;
Procedure Swap(Var A1,A2 : integer);
Var t : integer;
begin
t:=A1;
A1:=A2;
A2:=t;
end;
Procedure Merge(left,middle,rigth : integer);
Var Ileft,Irigth,Cur,i : integer;
begin
Ileft:=left;
Irigth:=middle+1;
Cur:=0;
While True do begin
Cur:=Cur+1;
if Amount[Ileft]<Amount[Irigth] then begin
Tmp[Cur]:=Amount[Ileft];
Ileft:=Ileft+1;
end else begin
Tmp[Cur]:=Amount[Irigth];
Irigth:=Irigth+1;
end;
if Ileft=middle+1 then begin
for i:=Irigth to rigth do begin
Cur:=Cur+1;
Tmp[Cur]:=Amount;
end;
break;
end;
if Irigth=rigth+1 then begin
for i:=Ileft to middle do begin
Cur:=Cur+1;
Tmp[Cur]:=Amount;
end;
break;
end;
end;
for i:=1 to rigth-left+1 do
Amount[left+i-1]:=Tmp;
end;
Procedure MergeSort(left,rigth : integer);
Var middle : integer;
begin
if rigth-left<=0 then exit;
if rigth-left=1 then begin
if Amount[left]>Amount[rigth] then
Swap(Amount[left],Amount[rigth]);
exit;
end;
middle:=(left + rigth) div 2;
MergeSort(left,middle);
MergeSort(middle+1,rigth);
Merge(left,middle,rigth);
end;
begin
Readln(T);
for tt:=1 to T do begin
Readln;
Readln(k);
for i:=1 to k do begin
ReadPhone(j);
Amount:=j;
end;
j:=0;
MergeSort(1,k);
p:=-1;
c:=0;
for i:=1 to k do
if Amount=p then begin
c:=c+1;
end else begin
if c>1 then WritePhone(p,c);
c:=1;
p:=Amount[i];
end;
if j=0 then Writeln('No duplicates.');
Writeln;
end;
end.[/pascal]
755 - keep getting WA! whats wrong with this?
I've submited the this answer to the 755 , and i keep getting WA. Each time i find a new bug , but i simply cant find anymore...
What's wrong with this code?
[cpp]
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <hash_map>
#include <vector>
#include <iostream>
int main()
{
/* hash_map<const char*, int, hash<const char*>, eqstr> months;*/
hash_map<int, int> addresses;
hash_map<int, int> keymaps;
int n, c,i, cut, j, k;
long num;
char number[1025];
vector <long> v;
int notnull=0;
int number_of_lines, number_of_problems;
int dups=0;
keymaps['A'] = 2;
keymaps['B'] = 2;
keymaps['C'] = 2;
keymaps['D'] = 3;
keymaps['E'] = 3;
keymaps['F'] = 3;
keymaps['G'] = 4;
keymaps['H'] = 4;
keymaps['I'] = 4;
keymaps['J'] = 5;
keymaps['K'] = 5;
keymaps['L'] = 5;
keymaps['M'] = 6;
keymaps['N'] = 6;
keymaps['O'] = 6;
keymaps['P'] = 7;
keymaps['R'] = 7;
keymaps['S'] = 7;
keymaps['T'] = 8;
keymaps['U'] = 8;
keymaps['V'] = 8;
keymaps['W'] = 9;
keymaps['X'] = 9;
keymaps['Y'] = 9;
scanf("%d\n", &number_of_problems);
for (k=0 ; k<number_of_problems; k++)
{
notnull =0;
dups =0;
v.clear();
addresses.clear();
scanf("%d\n", &number_of_lines);
for(j =0 ; j<number_of_lines; j++)
{
scanf("%[^\n]", number);
getchar();
c = 1;
n = strlen(number);
num = 0;
for (i=0; i<n ;i++)
{
if ((number>='0') && (number <='9'))
{
num = num*c;
num = num + (number-'0');
c = 10;
}
else if ((number>='A') && (number <='Z'))
{
num = num*c;
num = num + (keymaps[(int)number]);
c = 10;
}
}
notnull = 1 ;
addresses[num]++;
if(addresses[num] == 1)
v.push_back(num);
}
if ( notnull ) {
sort( v.begin(), v.end() );
for (vector<long>::const_iterator viter=v.begin(); viter!=v.end(); ++viter)
{
if (addresses[*viter] >1)
{
cut = *viter/10000;
cout << cut << "-" << *viter-cut*10000 <<" " << addresses[*viter] << endl;
dups++;
}
}
}
if (dups == 0)
cout << "No duplicates." << endl;
cout << endl;
}
return 0;
}
[/cpp]
What's wrong with this code?
[cpp]
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <hash_map>
#include <vector>
#include <iostream>
int main()
{
/* hash_map<const char*, int, hash<const char*>, eqstr> months;*/
hash_map<int, int> addresses;
hash_map<int, int> keymaps;
int n, c,i, cut, j, k;
long num;
char number[1025];
vector <long> v;
int notnull=0;
int number_of_lines, number_of_problems;
int dups=0;
keymaps['A'] = 2;
keymaps['B'] = 2;
keymaps['C'] = 2;
keymaps['D'] = 3;
keymaps['E'] = 3;
keymaps['F'] = 3;
keymaps['G'] = 4;
keymaps['H'] = 4;
keymaps['I'] = 4;
keymaps['J'] = 5;
keymaps['K'] = 5;
keymaps['L'] = 5;
keymaps['M'] = 6;
keymaps['N'] = 6;
keymaps['O'] = 6;
keymaps['P'] = 7;
keymaps['R'] = 7;
keymaps['S'] = 7;
keymaps['T'] = 8;
keymaps['U'] = 8;
keymaps['V'] = 8;
keymaps['W'] = 9;
keymaps['X'] = 9;
keymaps['Y'] = 9;
scanf("%d\n", &number_of_problems);
for (k=0 ; k<number_of_problems; k++)
{
notnull =0;
dups =0;
v.clear();
addresses.clear();
scanf("%d\n", &number_of_lines);
for(j =0 ; j<number_of_lines; j++)
{
scanf("%[^\n]", number);
getchar();
c = 1;
n = strlen(number);
num = 0;
for (i=0; i<n ;i++)
{
if ((number>='0') && (number <='9'))
{
num = num*c;
num = num + (number-'0');
c = 10;
}
else if ((number>='A') && (number <='Z'))
{
num = num*c;
num = num + (keymaps[(int)number]);
c = 10;
}
}
notnull = 1 ;
addresses[num]++;
if(addresses[num] == 1)
v.push_back(num);
}
if ( notnull ) {
sort( v.begin(), v.end() );
for (vector<long>::const_iterator viter=v.begin(); viter!=v.end(); ++viter)
{
if (addresses[*viter] >1)
{
cut = *viter/10000;
cout << cut << "-" << *viter-cut*10000 <<" " << addresses[*viter] << endl;
dups++;
}
}
}
if (dups == 0)
cout << "No duplicates." << endl;
cout << endl;
}
return 0;
}
[/cpp]
why cpp with class usually be judged Compile Error ?
the fallowing is the q755`s code ,it has been Compiled by miniGW & vc++ , & worked well local test .why it can be judged Compile Error ???
????????????????????????????
[/code]
????????????????????????????
Code: Select all
#include <iostream>
#include <string>
#include <cstdlib>
#include <list>
#include <algorithm>
using namespace std;
class TelNumber
{
public:
TelNumber(){m_Duplication=1;};
TelNumber(string & num){m_Duplication=1;setNumber(num);}
void setNumber(string & number);
void hasDuplication(){m_Duplication++;};
int getDuplicationCount(){return m_Duplication;};
bool isDuplicationer(){return m_Duplication==1?false:true;};
bool operator < (TelNumber & that){if( _stricmp(m_Numstr.c_str
(),that.getNumber().c_str())>0)return false;else return true;};
string getNumber(){return m_Numstr;};
private:
char toNumberic(char );
string m_Numstr;
int m_Duplication;
};
void TelNumber::setNumber(string & number)
{
string::size_type idx;
for(idx=0;idx<number.length();++idx)
{
char sgl;//a single number
sgl=toNumberic(number.at(idx));
if(sgl!='#')
{
m_Numstr+=string(1,sgl);
}
}
if (m_Numstr.length()>7)
{
cerr<<"ilegal telphone number!\n"
<<m_Numstr
<<endl;
m_Numstr="";
}
}
char TelNumber::toNumberic(char a)
{
switch(a)
{
case 'A':
case 'B':
case 'C':return '2';
case 'D':
case 'E':
case 'F':return '3';
case 'G':
case 'H':
case 'I':return '4';
case 'J':
case 'K':
case 'L':return '5';
case 'M':
case 'N':
case 'O':return '6';
case 'P':
case 'Q':
case 'R':
case 'S':return '7';
case 'T':
case 'U':
case 'V':return '8';
case 'W':
case 'X':
case 'Y':
case 'Z':return '9';
case ' ':
case '-':return '#';
default:return a;
}
}
class TelBook
{
public:
TelBook(){};
void addNumber(TelNumber );
void print();
private:
list<TelNumber> m_telList;
};
void TelBook::addNumber(TelNumber num)
{
list<TelNumber>::iterator iter;
bool isdup;
isdup=false;
for(iter=m_telList.begin();iter!=m_telList.end();++iter)
{
if(iter->getNumber()==num.getNumber()){iter->hasDuplication
();isdup=true;}
}
if(!isdup){m_telList.push_back(num);}
}
void TelBook::print()
{
m_telList.sort();
list<TelNumber>::iterator iter;
bool noDup;
noDup=true;
for(iter=m_telList.begin();iter!=m_telList.end();++iter)
{
if(iter->isDuplicationer())
{
cout<<iter->getNumber().substr(0,3)
<<"-"
<<iter->getNumber().substr(3)
<<" "
<<iter->getDuplicationCount()
<<endl;
noDup=false;
}
}
if(noDup){cout<<"No duplication."<<endl;}
}
void todo( void )
{
int i,n;
cin>>n;
TelBook book;
string telstr;
getline(cin,telstr);
for(i=0;i<n;++i)
{
getline(cin,telstr);
TelNumber num(telstr);
book.addNumber(num);
}
book.print();
cout<<endl;
}
int main()
{
int i,n;
cin>>n;
for(i=0;i<n;++i)
{
getchar();
todo();
}
return 0;
}
[/code]