Page 2 of 3
Posted: Thu Jun 19, 2003 12:53 am
by yahoo
Posted: Thu Jun 19, 2003 3:14 am
by Dmytro Chernysh
The answer for your input is just 0
Posted: Thu Jun 19, 2003 10:13 pm
by yahoo
10393 - The one handed typist WA???
Posted: Mon Jul 28, 2003 11:27 am
by Joseph Kurniawan
[c]#include<stdio.h>
#include<string.h>
int f,n,finger[15],cur,l,sum,count,i,j,k,a[130];
char word[1100][60],out[1100][60],temp[60];
void main(){
while(1){
if(scanf("%i %i",&f,&n)==EOF) break;
for(i=0;i<f;i++) scanf("%i",&finger);
//Checks the letter Jimmy can't type
for(i=0;i<f;i++){
switch(finger){
case 1:a[113]=a[97]=a[122]=1;break;
case 2:a[119]=a[120]=a[115]=1;break;
case 3:a[100]=a[99]=a[101]=1;break;
case 4:a[114]=a[102]=a[118]=a[116]=a[103]=a[98]=1;break;
case 7:a[121]=a[110]=a[104]=a[117]=a[106]=a[109]=1;break;
case 8:a[105]=a[107]=1;break;
case 9:a[111]=a[108]=1;break;
case 10:a[112]=1;break;
}
}
for(i=0;i<n;i++) scanf("%s",&word);
//Checks if Jimmy can type the word
for(i=0,cur=0,count=0;i<n;i++){
l=strlen(word);
if(l>=cur){
for(j=0;j<l;j++){
if(a[word[j]]) break;
}
if(j==l){
if(l>cur){count=0;cur=l;}
else count++;
strcpy(out[count],word);
}
}
}
//Sorts the word Jimmy can type
for(i=0;i<count;i++){
j=i;
for(k=i+1;k<=count;k++){
if(strcmp(out[k],out[j])<0) j=k;
}
if(j!=i){
strcpy(temp,out);
strcpy(out,out[j]);
strcpy(out[j],temp);
}
}
memset(a,0,sizeof(a));
//Counts the total sum of words (excluding the same words)
for(i=0,sum=0;i<=count;i++){
while(strcmp(out,out[i+1])==0) i++;
sum++;
}
printf("%i\n",sum);
//Prints the words (excluding the same words)
for(i=0;i<=count;i++){
while(strcmp(out,out[i+1])==0) i++;
printf("%s\n",out[i]);
}
}
}
[/c]
What's could possibly be wrong with my code?
Any help plz???
Posted: Tue Jul 29, 2003 5:20 am
by Joseph Kurniawan
Is it true that for Input:
5 5
6
7 8
9 10
the
stewardesses
have
funny
hair
The output will zero?
Posted: Tue Jul 29, 2003 7:26 am
by Per
No. The output should be the same as in the first sample output.
Posted: Tue Jul 29, 2003 5:05 pm
by Joseph Kurniawan
Well then, could you plz tell me the mistake in my code?
Posted: Wed Jul 30, 2003 9:35 am
by Joseph Kurniawan
Never mind it. Got it AC now.
What makes it a WA seems to be the method of excluding the duplicate words (the total number and the printing part).
So I tried to exlude the duplicate words first before sorting them and it worked.
But I'm still curious where's the 'bugginess' of the previous method :
[c]
while(strcmp(out,out[i+1])==0) i++;
[/c]
Can anybody give me a sample input that will show the 'bugginess' of the method I showed above?
Thanks a lot.
Posted: Sat Aug 02, 2003 8:00 pm
by SilVer DirectXer
i got a WA too, i have checked if repeated words...why WA?
[cpp]
#include <stdio.h>
#include <string.h>
char words[1002][52];
char v[1002][52];
char tempch[52];
int i,j,k,l,m,n;
char dummy[100];
char cant[100];
int counter,vcounter;
int ok;
int maxlen;
void main()
{
while (1)
{
scanf("%d",&n);
if (feof(stdin))
break;
scanf("%d",&m);
gets(dummy);
counter=1;
ok=1;
for (i=1;i<=n;i++)
{
scanf("%d",&j);
if (j==1)
{
cant[counter++]='q';cant[counter++]='a';cant[counter++]='z';
}
if (j==2)
{
cant[counter++]='w';cant[counter++]='s';cant[counter++]='x';
}
if (j==3)
{
cant[counter++]='e';cant[counter++]='d';cant[counter++]='c';
}
if (j==4)
{
cant[counter++]='r';cant[counter++]='f';cant[counter++]='v';
cant[counter++]='t';cant[counter++]='g';cant[counter++]='b';
}
if (j==5 && ok==1)
{
cant[counter++]=' ';
ok=0;
}
if (j==6 && ok==1)
{
cant[counter++]=' ';
ok=0;
}
if (j==7)
{
cant[counter++]='y';cant[counter++]='h';cant[counter++]='n';
cant[counter++]='u';cant[counter++]='j';cant[counter++]='m';
}
if (j==8)
{
cant[counter++]='i';cant[counter++]='k';cant[counter++]=',';
}
if (j==9)
{
cant[counter++]='o';cant[counter++]='l';cant[counter++]='.';
}
if (j==10)
{
cant[counter++]='p';cant[counter++]=';';cant[counter++]='/';
}
}
gets(dummy);
counter--;
vcounter=1;
for (i=1;i<=m;i++)
{
gets(words);
}
maxlen=0;
vcounter=0;
for (i=1;i<=m;i++)
{
ok=1;
for (j=0;j<(int)strlen(words);j++)
{
for (k=1;k<=counter;k++)
{
if (words[j]==cant[k])
{
ok=0;
break;
}
}
if (ok==0)
break;
}
if (ok==1)
{
if ((int)strlen(words)>=maxlen)
{
if ((int)strlen(words)>maxlen)
{
maxlen=(int)strlen(words);
vcounter=0;
}
strcpy(v[++vcounter],words);
for (k=1;k<vcounter;k++)
{
if (strcmp(v[k],v[vcounter])==0)
vcounter--;
}
}
}
}
if (vcounter==1)
{
printf("1\n");
puts(v[1]);
}
else
{
for (i=2;i<=vcounter;i++)
{
for (j=1;j<i;j++)
{
if (strcmp(v,v[j])<0)
{
strcpy(tempch,v);
for (k=i;k>j;k--)
{
strcpy(v[k],v[k-1]);
}
strcpy(v[j],tempch);
}
}
}
printf("%d\n",vcounter);
for (i=1;i<=vcounter;i++)
puts(v);
}
}
}
[/cpp]
Posted: Sat Aug 02, 2003 11:43 pm
by UFP2161
SilVer DirectXer:
Check your "check for duplicates" code again. It's not entirely correct.
Posted: Sun Aug 03, 2003 6:17 pm
by SilVer DirectXer
UFP2161 wrote:SilVer DirectXer:
Check your "check for duplicates" code again. It's not entirely correct.
thanks UFP2161 , i have updated the code and checked repeated before putting to v[].(see above)
however. seems i am still WA....
why?
Posted: Sun Aug 03, 2003 7:45 pm
by UFP2161
SilVer DirectXer:
The only possible problem I see would relate to the following from the problem description:
Each description begins with two numbers, F, the number of fingers that Jimmy cannot use, and N<= 1000, the number of big words to consider.
Following are F numbers listing the fingers Jimmy cannot use.
Also, remember that gets() reads to end of current line. Hope that helps!
Posted: Mon Aug 04, 2003 5:10 am
by SilVer DirectXer
thanks anyway!
i got a AC now
10393 - The one-handed typist
Posted: Thu Apr 01, 2004 7:35 pm
by madelman
Anybody knows why this code gives WA? It seems to work in every case I thought, it counts the words without repetition, the output is sorted...
Any help or any test case where this fails?
[cpp]
#include <iostream>
#include <string>
#include <sstream>
#include <set>
bool letras[128];
bool correcta(string t) {
for (int i=0; i < t.length(); i++)
if (letras[t] == false) return false;
return true;
}
void main() {
int F, N, dedo;
string tmp;
set<string> pal;
int maxlon, num;
while (true) {
if(!getline(cin, tmp)) break;
stringstream ss(tmp);
ss >> F >> N;
for (int i=0; i < 128; i++)
letras = true;
// marquem quines tecles no pot pulsar
for (int i=0; i < F; i++) {
cin >> dedo;
switch(dedo) {
case 1:
letras['q'] = letras['a'] = letras['z'] = false;
break;
case 2:
letras['w'] = letras['s'] = letras['x'] = false;
break;
case 3:
letras['e'] = letras['d'] = letras['c'] = false;
break;
case 4:
letras['r'] = letras['f'] = letras['v'] = letras['t'] = letras['g'] = letras['b'] = false;
break;
case 5:
letras[' '] = false;
break;
case 6:
letras[' '] = false;
break;
case 7:
letras['y'] = letras['h'] = letras['n'] = letras['u'] = letras['j'] = letras['m'] = false;
break;
case 8:
letras['i'] = letras['k'] = letras[','] = false;
break;
case 9:
letras['o'] = letras['l'] = letras['.'] = false;
break;
case 10:
letras['p'] = letras[';'] = letras['/'] = false;
break;
}
}
getline(cin, tmp);
pal.clear();
maxlon = 0;
// llegim cada paraula i comprobem si la pot escriure
// si pot, la guardem per mostrar-la despres
for (int i=0; i < N; i++) {
getline(cin, tmp);
if (correcta(tmp)) {
if (tmp.length() > maxlon) maxlon = tmp.length();
pal.insert(tmp);
}
}
set<string>::const_iterator itm;
num = 0;
for (itm=pal.begin(); itm!=pal.end(); itm++)
if ((*itm).length() == maxlon)
num++;
cout << num << endl;
for (itm=pal.begin(); itm!=pal.end(); itm++)
if ((*itm).length() == maxlon)
cout << *itm << endl;
}
}
[/cpp]
10393 always WA
Posted: Sun Oct 17, 2004 10:38 am
by oulongbin
i don't know why!
[cpp]
#include <iostream>
using namespace std;
#include <cstring>
#include <cstdio>
int main()
{
int ff,n;
int x;
bool f[200];
int i,j;
int len;
int count;
int num;
char word[60];
char w[1010][60];
char output[1010][60];
while(cin>>ff>>n)
{
for(i=0;i<200;i++)
{
f=true;
}
while(ff--)
{
cin>>x;
switch(x)
{
case 1:f[int('q')]=f[int('a')]=f[int('z')]=false;break;
case 2:f[int('w')]=f[int('s')]=f[int('x')]=false;break;
case 3:f[int('e')]=f[int('d')]=f[int('c')]=false;break;
case 4:f[int('r')]=f[int('f')]=f[int('v')]=f[int('t')]=f[int('g')]=f[int('b')]=false;break;
case 5:f[int(' ')]=false;break;
case 6:f[int(' ')]=false;break;
case 7:f[int('y')]=f[int('h')]=f[int('n')]=f[int('u')]=f[int('j')]=f[int('m')]=false;break;
case 8:f[int('i')]=f[int('k')]=f[int(',')]=false;break;
case 9:f[int('o')]=f[int('l')]=f[int('.')]=false;break;
case 10:f[int('p')]=f[int('/')]=f[int(';')]=false;break;
}
}
count=0;
num=0;
cin.get();
while(n--)
{
cin.getline(word,60);
//gets(word);
//cin>>word;
len=strlen(word);
for(i=0;i<len;i++)
{
if(f[int(word)]==false)
break;
}
if(i==len)
{
for(i=0;i<len;i++)
{
w[count]=word;
}
w[count]='\0';
count++;
}
}
len=strlen(w[0]);
for(i=1;i<count;i++)
{
if(len<strlen(w))
len=strlen(w);
}
for(i=0;i<count;i++)
{
if(len==strlen(w))
{
strcpy(output[num++],w);
}
}
for(i=0;i<num-1;i++)
{
for(j=0;j<num-1-i;j++)
{
if(strcmp(output[j],output[j+1])>0)
{
strcpy(word,output[j]);
strcpy(output[j],output[j+1]);
strcpy(output[j+1],word);
}
}
}
cout<<num<<endl;
for(i=0;i<num;i++)
cout<<output<<endl;
}
return 0;
}
[/cpp]