Page 3 of 3

Posted: Sat Oct 07, 2006 3:31 am
by jjtse
oh my goodness.

I changed:

vector ==> array
Character.(tolower/toupper) ==> +- 32
print ==> write


now it got accepted in
time:1.506 mem:10688

Posted: Sat Oct 07, 2006 3:33 am
by jjtse
hey darko, wanna see my code? I did exactly what you said and it got accepted now. I didn't change the way I did I/O at all.


From your last statement, it sounded like you think my program is continuously waiting for input, and that's why it's TLE.

Just for the record, I tried submitting my program with a system.exit(1) right after I do all the input, and the autojudge returned WA. So that's when I figured it couldn't have been my input that's causing TLE

Posted: Sat Oct 07, 2006 3:37 am
by Darko
No, that's fine, now I have to solve it, too :)

No, what I meant was *my* code seems to be in an endless loop on the second string.

[EDIT] There, I feel better now :)

726 ~ in C WA need help

Posted: Mon Jan 01, 2007 3:31 pm
by scan33scan33
I have tried a lot of cases and got them all right.
Can anyone give me help?

Below is my code......

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

struct CHARS{
char item;
int num;
};

typedef struct CHARS CHS;

int cmp(const void *a1, const void *a2)
{
if(((CHS*)a1)->num < ((CHS*)a2)->num)
return 1;
if(((CHS*)a1)->num == ((CHS*)a2)->num)
if(((CHS*)a1)->item > ((CHS*)a2)->item)
return 1;
else
return 0;
return (-1);
}

int main()
{
CHS s_org[30],s[30],tmp;
char ch,trans[256],s1[10000],s2[30][5000];
int slen1,slen2[100],at,i,j,k,sr2=0,t=0,all=0;

while(slen1!=0 || t==0)
{
gets(s1);
slen1 = strlen(s1);
if(slen1==0 && t==1)
break;
if(slen1>0)
t=1;
for(at=0;at<slen1;at++)
{
if(isalpha(s1[at]))
{
ch = tolower(s1[at]);
for(i=0;i<all;i++)
{
if(s_org.item == ch)
{
s_org.num += 1;
break;
}
}
if(i==all)
{
s_org[all].item = ch;
s_org[all].num = 1;
all+=1;
}
}
}/*store*/
}

qsort(s_org,all,sizeof(CHS),cmp);

while(1)
{
if(gets(s2[sr2])==NULL)
break;
slen2[sr2] = strlen(s2[sr2]);
if(slen2[sr2]==0)
break;
++sr2;
}

all = 0;

for(k=0;k<sr2;k++)
{
for(at=0;at<slen2[k];at++)
{
if(isalpha(s2[k][at]))
{
ch = tolower(s2[k][at]);
for(i=0;i<all;i++)
{
if(s.item == ch)
{
s.num += 1;
break;
}
}
if(i==all)
{
s[all].item = ch;
s[all].num = 1;
all+=1;
}
}
}/*store*/
}

qsort(s,all,sizeof(CHS),cmp);

for(j=0;j<all;j++)
{
trans[s[j].item] = s_org[j].item;
}

for(k=0;k<sr2;k++)
{
for(at=0;at<slen2[k];at++)
{
if(isalpha(s2[k][at]))
{
ch = s2[k][at];
if(isupper(ch))
{
ch = tolower(ch);
ch = trans[ch];
ch = toupper(ch);
printf("%c",ch);
}
else
{
ch = trans[ch];
printf("%c",ch);
}
}
else
printf("%c",s2[k][at]);
}
if(k!=sr2-1)
printf("\n");
}
/*scanf(" ");*/
return 0;
}

Posted: Thu Jan 04, 2007 2:42 pm
by Jan
Dont open a new thread unless there is none. Try the following thread
http://online-judge.uva.es/board/viewto ... hlight=726

Posted: Tue May 15, 2007 2:09 pm
by algoJo
Hi, I got multiple RE and MLE on this problem, can someone show me some hints?

Code: Select all

#include<cstdlib>
#include<cstdio>
#include<cstring>
#define MAX 40001

struct node{
   char alpha;
   int total;
}arr[26],rra[26];



char kar[]="abcdefghijklmnopqrstuvwxyz";
char coto[]="abcdefghijklmnopqrstuvwxyz";

char key[1000][MAX];
int I;

void count(char line[]){
   long int i,len;
   len=strlen(line);
   for(i=0;i<len;i++)
      if(line[i]>='A'&&line[i]<='Z')
      {
         line[i]-='A';
         line[i]+='a';
         arr[line[i]-'a'].total++;
      }
      else
      if(line[i]>='a'&&line[i]<='z')
      {
         arr[line[i]-'a'].total++;
      }
}


void count2(char line[]){
   long int i,len;
   len=strlen(line);
   for(i=0;i<len;i++)
      if(line[i]>='A'&&line[i]<='Z')
      {
         line[i]-='A';
         line[i]+='a';
         rra[line[i]-'a'].total++;
      }
      else
      if(line[i]>='a'&&line[i]<='z')
      {
         rra[line[i]-'a'].total++;
      }
}

void init(void){
   int i;
   for(i=0;i<26;i++)
   {
      arr[i].alpha=rra[i].alpha=i+'a';
      arr[i].total=rra[i].total=0;
   }
}

int cmp(const void *a,const void *b){
   struct node *x,*y;
   x=(struct node*)a;
   y=(struct node*)b;
   return y->total-x->total;
}

void doit(void){
   qsort(arr,26,sizeof(arr[0]),cmp);
   qsort(rra,26,sizeof(rra[0]),cmp);
   long int i,j;
   struct node temp;
   for(i=25;i>0;i--)
      for(int j=i-1;j>=0;j--)
         if(arr[i].total==arr[j].total&&arr[i].alpha<arr[j].alpha)
         {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
         }  

   for(i=25;i>0;i--)
      for(int j=i-1;j>=0;j--)
         if(rra[i].total==rra[j].total&&rra[i].alpha<rra[j].alpha)
         {
            temp=rra[i];
            rra[i]=rra[j];
            rra[j]=temp;
         }     
   for(i=0;i<26;i++)
      if(rra[i].total)
      {
         coto[rra[i].alpha-'a']=arr[i].alpha;
      }      
   for(i=0;i<I;i++)
   {
      long int len=strlen(key[i]);
      for(int j=0;j<len;j++)
         if(key[i][j]>='a'&&key[i][j]<='z'){printf("%c",coto[key[i][j]-'a']);}
         else
         if(key[i][j]>='A'&&key[i][j]<='Z'){printf("%c",coto[key[i][j]-'A']-32);}
         else printf("%c",key[i][j]);
      printf("\n");
   }
}

int main(){
   char line[MAX];
  // freopen("in.txt","r",stdin);
 //  freopen("out.txt","w",stdout);
   init();
   while(gets(line))
   {
      if(!strlen(line)) break;
      count(line);
      memset(line,0,sizeof(line));
   }
   while(gets(line))
   {
      strcpy(key[I],line);
      I++;
      count2(line);
      memset(line,0,sizeof(line));
   }
   doit();
}

Re:

Posted: Thu Mar 17, 2011 2:30 am
by DD
algoJo wrote:Hi, I got multiple RE and MLE on this problem, can someone show me some hints?

Code: Select all

#include<cstdlib>
#include<cstdio>
#include<cstring>
#define MAX 40001

struct node{
   char alpha;
   int total;
}arr[26],rra[26];



char kar[]="abcdefghijklmnopqrstuvwxyz";
char coto[]="abcdefghijklmnopqrstuvwxyz";

char key[1000][MAX];
int I;

void count(char line[]){
   long int i,len;
   len=strlen(line);
   for(i=0;i<len;i++)
      if(line[i]>='A'&&line[i]<='Z')
      {
         line[i]-='A';
         line[i]+='a';
         arr[line[i]-'a'].total++;
      }
      else
      if(line[i]>='a'&&line[i]<='z')
      {
         arr[line[i]-'a'].total++;
      }
}


void count2(char line[]){
   long int i,len;
   len=strlen(line);
   for(i=0;i<len;i++)
      if(line[i]>='A'&&line[i]<='Z')
      {
         line[i]-='A';
         line[i]+='a';
         rra[line[i]-'a'].total++;
      }
      else
      if(line[i]>='a'&&line[i]<='z')
      {
         rra[line[i]-'a'].total++;
      }
}

void init(void){
   int i;
   for(i=0;i<26;i++)
   {
      arr[i].alpha=rra[i].alpha=i+'a';
      arr[i].total=rra[i].total=0;
   }
}

int cmp(const void *a,const void *b){
   struct node *x,*y;
   x=(struct node*)a;
   y=(struct node*)b;
   return y->total-x->total;
}

void doit(void){
   qsort(arr,26,sizeof(arr[0]),cmp);
   qsort(rra,26,sizeof(rra[0]),cmp);
   long int i,j;
   struct node temp;
   for(i=25;i>0;i--)
      for(int j=i-1;j>=0;j--)
         if(arr[i].total==arr[j].total&&arr[i].alpha<arr[j].alpha)
         {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
         }  

   for(i=25;i>0;i--)
      for(int j=i-1;j>=0;j--)
         if(rra[i].total==rra[j].total&&rra[i].alpha<rra[j].alpha)
         {
            temp=rra[i];
            rra[i]=rra[j];
            rra[j]=temp;
         }     
   for(i=0;i<26;i++)
      if(rra[i].total)
      {
         coto[rra[i].alpha-'a']=arr[i].alpha;
      }      
   for(i=0;i<I;i++)
   {
      long int len=strlen(key[i]);
      for(int j=0;j<len;j++)
         if(key[i][j]>='a'&&key[i][j]<='z'){printf("%c",coto[key[i][j]-'a']);}
         else
         if(key[i][j]>='A'&&key[i][j]<='Z'){printf("%c",coto[key[i][j]-'A']-32);}
         else printf("%c",key[i][j]);
      printf("\n");
   }
}

int main(){
   char line[MAX];
  // freopen("in.txt","r",stdin);
 //  freopen("out.txt","w",stdout);
   init();
   while(gets(line))
   {
      if(!strlen(line)) break;
      count(line);
      memset(line,0,sizeof(line));
   }
   while(gets(line))
   {
      strcpy(key[I],line);
      I++;
      count2(line);
      memset(line,0,sizeof(line));
   }
   doit();
}
I noticed that in you cmp function, you didn't sort it alphabetically if x->total == y->total.