555 - Bridge Hands
Moderator: Board moderators
555
In my linux computer can compile it and no problem to solve the question
but when i submit to online judge .it say complie error??
what's wrong of my code
#include <iostream>
#include <cstdlib>
using namespace std;
enum type{CLUBS=0,DIAMONDS,SPADES,HEARTS};
enum no{two=0,three,four,five,six,seven,eight,nine,ten,jack,queen,king,Ace};
struct card{
no nu;
char b;
char a;
type cardtype;
};
void swap(card &a,card &b);
void print(card A[],char dir);
void sort(card A[13]);
void save(card A[13],card B[],int i);
void sortname(int a,int b,card A[]);
int main(){
card total[52];
card North[13];
card South[13];
card East[13];
card West[13];
char c;
char who_start=getchar();
int i=0;
while(1){
c=getchar();
if(c=='\n'){}
else if(c=='#')break;
else{
total.a=c;
total.b=getchar();
i++;
}
}
for(int i=0;i<52;i++){
switch(total.a){
case 'C':total.cardtype=CLUBS;
break;
case 'D':total.cardtype=DIAMONDS;
break;
case 'S':total.cardtype=SPADES;
break;
case 'H':total.cardtype=HEARTS;
break;
}//end switch
switch(total.b){
case 'A' :total.nu=Ace;
break;
case '2': total.nu=two;
break;
case '3':total[i].nu=three;
break;
case '4':total[i].nu=four;
break;
case '5':total[i].nu=five;
break;
case '6':total[i].nu=six;
break;
case '7':total[i].nu=seven;
break;
case '8':total[i].nu=eight;
break;
case '9':total[i].nu=nine;
break;
case 'T':total[i].nu=ten;
break;
case 'J':total[i].nu=jack;
break;
case 'Q':total[i].nu=queen;
break;
case 'K':total[i].nu=king;
break;
}//end swithc
}//end for
switch(who_start){
case 'W':save(North,total,0);
save(East,total,1);
save(South,total,2);
save(West,total,3);
break;
case 'E':save(South,total,0);
save(West,total,1);
save(North,total,2);
save(East,total,3);
break;
case 'N':save(East,total,0);
save(South,total,1);
save(West,total,2);
save(North,total,3);
break;
case 'S':save(West,total,0);
save(North,total,1);
save(East,total,2);
save(South,total,23);
break;
}//end switch
sort(South);
sort(North);
sort(West);
sort(East);
print(South,'S');
cout<<endl;
print(West,'W');
cout<<endl;
print(North,'N');
cout<<endl;
print(East,'E');
}
void sort(card A[13]){
int l=0,k=0,r=0;
for(int i=0;i<13;i++){
if(A[i].cardtype==CLUBS){
l++;
}
else if(A[i].cardtype==DIAMONDS){
k++;
}
else if(A[i].cardtype==SPADES){
r++;
}
}
k=k+l;
r+=k;
for(int i=0;i<12;i++){
for(int j=i+1;j<13;j++){
if(A[i].cardtype>A[j].cardtype){
swap(A[i],A[j]);
}
}
}
sortname(0,l,A);
sortname(l,k,A);
sortname(k,r,A);
sortname(r,13,A);
}
void print(card A[],char dir){
cout<<dir<<": ";
for(int i=0;i<13;i++){
cout<<A[i].a<<A[i].b<<" ";
}
}
void sortname(int a,int b,card A[]){
for(int i=a;i<b;i++){
for(int j=i;j<b;j++){
if(A[i].nu>A[j].nu){
swap(A[i],A[j]);
}
}
}
}
void swap(card &a, card &b){
card temp=a;
a=b;
b=temp;
}
void save(card A[13],card B[],int i){
for(int j=0;j<13;j++){
A[j]=B[i];
i=i+4;
}
}
but when i submit to online judge .it say complie error??
what's wrong of my code
#include <iostream>
#include <cstdlib>
using namespace std;
enum type{CLUBS=0,DIAMONDS,SPADES,HEARTS};
enum no{two=0,three,four,five,six,seven,eight,nine,ten,jack,queen,king,Ace};
struct card{
no nu;
char b;
char a;
type cardtype;
};
void swap(card &a,card &b);
void print(card A[],char dir);
void sort(card A[13]);
void save(card A[13],card B[],int i);
void sortname(int a,int b,card A[]);
int main(){
card total[52];
card North[13];
card South[13];
card East[13];
card West[13];
char c;
char who_start=getchar();
int i=0;
while(1){
c=getchar();
if(c=='\n'){}
else if(c=='#')break;
else{
total.a=c;
total.b=getchar();
i++;
}
}
for(int i=0;i<52;i++){
switch(total.a){
case 'C':total.cardtype=CLUBS;
break;
case 'D':total.cardtype=DIAMONDS;
break;
case 'S':total.cardtype=SPADES;
break;
case 'H':total.cardtype=HEARTS;
break;
}//end switch
switch(total.b){
case 'A' :total.nu=Ace;
break;
case '2': total.nu=two;
break;
case '3':total[i].nu=three;
break;
case '4':total[i].nu=four;
break;
case '5':total[i].nu=five;
break;
case '6':total[i].nu=six;
break;
case '7':total[i].nu=seven;
break;
case '8':total[i].nu=eight;
break;
case '9':total[i].nu=nine;
break;
case 'T':total[i].nu=ten;
break;
case 'J':total[i].nu=jack;
break;
case 'Q':total[i].nu=queen;
break;
case 'K':total[i].nu=king;
break;
}//end swithc
}//end for
switch(who_start){
case 'W':save(North,total,0);
save(East,total,1);
save(South,total,2);
save(West,total,3);
break;
case 'E':save(South,total,0);
save(West,total,1);
save(North,total,2);
save(East,total,3);
break;
case 'N':save(East,total,0);
save(South,total,1);
save(West,total,2);
save(North,total,3);
break;
case 'S':save(West,total,0);
save(North,total,1);
save(East,total,2);
save(South,total,23);
break;
}//end switch
sort(South);
sort(North);
sort(West);
sort(East);
print(South,'S');
cout<<endl;
print(West,'W');
cout<<endl;
print(North,'N');
cout<<endl;
print(East,'E');
}
void sort(card A[13]){
int l=0,k=0,r=0;
for(int i=0;i<13;i++){
if(A[i].cardtype==CLUBS){
l++;
}
else if(A[i].cardtype==DIAMONDS){
k++;
}
else if(A[i].cardtype==SPADES){
r++;
}
}
k=k+l;
r+=k;
for(int i=0;i<12;i++){
for(int j=i+1;j<13;j++){
if(A[i].cardtype>A[j].cardtype){
swap(A[i],A[j]);
}
}
}
sortname(0,l,A);
sortname(l,k,A);
sortname(k,r,A);
sortname(r,13,A);
}
void print(card A[],char dir){
cout<<dir<<": ";
for(int i=0;i<13;i++){
cout<<A[i].a<<A[i].b<<" ";
}
}
void sortname(int a,int b,card A[]){
for(int i=a;i<b;i++){
for(int j=i;j<b;j++){
if(A[i].nu>A[j].nu){
swap(A[i],A[j]);
}
}
}
}
void swap(card &a, card &b){
card temp=a;
a=b;
b=temp;
}
void save(card A[13],card B[],int i){
for(int j=0;j<13;j++){
A[j]=B[i];
i=i+4;
}
}
555 - Bridge Hands
Hi everybody,
I thought this problem is easy but I get WA...
Here's my code , anyone pls help me!!
Waiting 4 help!!!
Thankx in advance..
I thought this problem is easy but I get WA...
Here's my code , anyone pls help me!!
Code: Select all
#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
#define pb push_back
#define fir_big 0
#define same 1
#define sec_big 2
vector <char> nc , ec , wc , sc , nn , en , wn , sn;
string parse_str ( string s )
{
string x = "";
for ( int i = 0 ; i < s.size() ; i ++ )
{
if ( s[i] != ' ' )
x += s[i];
}
return x;
}
int get_big ( char c , char d )
{
int a = 4 , b = 3;
if ( c == d )
return same;
else if ( c == 'C' && ( d == 'D' || d == 'S' || d == 'H' ) )
return fir_big;
else if ( c == 'D' && ( d == 'S' || d == 'H' ) )
return fir_big;
else if ( c == 'S' && d == 'H' )
return fir_big;
return sec_big;
}
void sort_pile ( vector <char> ty , vector <char> num , char s )
{
vector <int> val (num.size());
for ( int i = 0 ; i < num.size() ; i ++ )
{
if ( num[i] == 'T' ) val[i] = 10;
else if ( num[i] == 'J' ) val[i] = 11;
else if ( num[i] == 'Q' ) val[i] = 12;
else if ( num[i] == 'A' ) val[i] = 13;
else val[i] = num[i] - '0';
}
for ( int i = 0 ; i < ty.size() ; i ++ )
{
for ( int j = i + 1 ; j < ty.size() ; j ++ )
{
char c = ty[i] , d = ty[j];
if ( get_big ( c , d ) == same )
{
if ( val[i] > val[j] )
{
swap ( val[i] , val[j] );
swap ( num[i] , num[j] );
}
}
else if ( get_big ( c , d ) == sec_big )
{
swap ( ty[i] , ty[j] );
swap ( val[i] , val[j] );
swap ( num[i] , num[j] );
}
}
}
if ( s == 'N' )
{
nc = ty;
nn = num;
}
else if ( s == 'S' )
{
sc = ty;
sn = num;
}
else if ( s == 'W' )
{
wc = ty;
wn = num;
}
else if ( s == 'E' )
{
ec = ty;
en = num;
}
}
void display ( vector <char> a , vector <char> b , char c )
{
printf ( "%c: " , c );
int i;
for ( i = 0 ; i < a.size() - 1 ; i ++ )
printf ( "%c%c " , a[i] , b[i] );
printf ( "%c%c\n" , a[i] , b[i] );
}
void deal ( string pile , char start )
{
if ( start == 'N' ) start = 2;
else if ( start == 'E' ) start = 3;
else if ( start == 'S' ) start = 4;
else if ( start == 'W' ) start = 1;
int nxt = start;
for ( int i = 0 ; i < pile.size() ; i += 2 )
{
if ( nxt == 2 )
{
ec.pb (pile[i]);
en.pb (pile[i + 1]);
nxt = 3;
}
else if ( nxt == 3 )
{
sc.pb (pile[i]);
sn.pb (pile[i + 1]);
nxt = 4;
}
else if ( nxt == 4 )
{
wc.pb (pile[i]);
wn.pb (pile[i + 1]);
nxt = 1;
}
else if ( nxt == 1 )
{
nc.pb (pile[i]);
nn.pb (pile[i + 1]);
nxt = 2;
}
}
/*display (sc , sn , 'S');
display (wc , wn , 'W');
display (nc , nn , 'N');
display (ec , en , 'E');
cout << endl << endl;*/
sort_pile (nc , nn , 'N');
sort_pile (ec , en , 'E');
sort_pile (sc , sn , 'S');
sort_pile (wc , wn , 'W');
display (sc , sn , 'S');
display (wc , wn , 'W');
display (nc , nn , 'N');
display (ec , en , 'E');
}
void clear_all ()
{
nc.clear();nn.clear();
sc.clear();sn.clear();
ec.clear();en.clear();
wc.clear();wn.clear();
}
int main ()
{
char start;
while ( scanf ( "%c" , &start ) == 1 && start != '#' )
{
getchar();
string a , b;
string pile = "";
getline ( cin , a );
getline ( cin , b );
//cout << "A = " << a << endl << "B = " << b << endl << endl;
pile += parse_str (a);
pile += parse_str (b);
deal ( pile , start );
clear_all();
}
return 0;
}
Waiting 4 help!!!
Thankx in advance..
555 - Bridge Hands
Still no reply!!
anyone pls help me...
![:cry:](./images/smilies/icon_cry.gif)
![:cry:](./images/smilies/icon_cry.gif)
anyone pls help me...
-
- Guru
- Posts: 5947
- Joined: Thu Sep 01, 2011 9:09 am
- Location: San Jose, CA, USA
Re: 555 - Bridge Hands
aeiou you're not checking for a King.
Check input and AC output for thousands of problems on uDebug!
-
- New poster
- Posts: 14
- Joined: Sun Jan 20, 2013 1:58 am
555 - Bridge Hands Wrong Answer
I got Wrong Answer in this problem, and I can't find what goes wrong with my code. Could somebody please give me some input/output cases or tell me the mistake in my code?
This is my C++ code:
Thank you very much ^-^
This is my C++ code:
Code: Select all
Accepted
Last edited by MauriWilde on Fri Jun 21, 2013 6:11 am, edited 1 time in total.
-
- Guru
- Posts: 5947
- Joined: Thu Sep 01, 2011 9:09 am
- Location: San Jose, CA, USA
Re: 555 - Bridge Hands Wrong Answer
Code: Select all
else if (b[1] == 'Q')
y += 12;
else if (b[1] == 'Q')
y += 13;
Check input and AC output for thousands of problems on uDebug!
-
- New poster
- Posts: 14
- Joined: Sun Jan 20, 2013 1:58 am
Re: 555 - Bridge Hands Wrong Answer
o.O
How I didn't see that!!??
Accepted![:D](./images/smilies/icon_biggrin.gif)
Thank you!! ^-^
How I didn't see that!!??
Accepted
![:D](./images/smilies/icon_biggrin.gif)
Thank you!! ^-^
uva 555
I know my code output is wrong.I also know qsort paramaters are wrong.but i dont't know how to modify it. who can tell me how to modify qsort paramaters. ths
Code: Select all
//
#include<iostream>
#include<string.h>
#define MAX_SIZE 512
using namespace std;
typedef struct
{
char suit;
char point;
}card;
int pointtovalues(char point)
{
if(point>='0' && point <='9')
return point-'0';
else if(point=='T')
return 10;
else if(point=='J')
return 11;
else if(point=='Q')
return 12;
else if(point=='K')
return 13;
else if(point=='A')
return 14;
return -1;
}
int suittovalues(char psuit)
{
if(psuit=='C')
return 0;
else if(psuit=='D')
return 1;
else if(psuit=='S')
return 2;
else
return 3;
}
int compare (const void * a, const void * b)
{
card *pa=(card *)a;
card *pb=(card *)b;
if(pa->suit==pb->suit)//compare point
{
int temp_a=pointtovalues(pa->point);
int temp_b=pointtovalues(pb->point);
return (temp_a>temp_b?1:-1);
}
else
{
int temp_a=suittovalues(pa->suit);
int temp_b=suittovalues(pb->suit);
return (temp_a>temp_b?1:-1);
}
}
int main()
{
char data[MAX_SIZE]={NULL},direction,temp_direction;
card my_card[52];
card p[4][13];
int current_pos=-1;
int my_card_count=0;
while(cin>>temp_direction)
{
int count_times=2;
if(temp_direction=='#')
break;
direction=temp_direction;
while(count_times)
{
cin>>data;
for(int i=0;i<strlen(data);)
{
my_card[my_card_count].suit=data[i];
i++;
my_card[my_card_count].point=data[i];
i++;
my_card_count++;
}
count_times--;
}
}
if(direction=='N')
current_pos=1;
else if(direction=='E')
current_pos=2;
else if(direction=='S')
current_pos=3;
else
current_pos=0;
int distrubed_card_count=0,start_osition=current_pos;
int j=0;
for(int i=0;i<52;i++)
{
current_pos=(current_pos+1)%4;
p[current_pos][j]=my_card[distrubed_card_count];
distrubed_card_count++;
if(start_osition==current_pos)
j++;
/* for(int j=0;j<13;j++)
{
p[current_pos][j]=my_card[distrubed_card_count];
distrubed_card_count++;
}*/
}
for(int i=0;i<4;i++)
qsort(p[i],4,sizeof(p[0][0]),compare);
cout<<"S: ";
for(int i=0;i<13;i++)
cout<<p[3][i].suit<<p[3][i].point<<" ";
cout<<endl;
cout<<"W: ";
for(int i=0;i<13;i++)
cout<<p[0][i].suit<<p[0][i].point<<" ";
cout<<endl;
cout<<"N: ";
for(int i=0;i<13;i++)
cout<<p[1][i].suit<<p[1][i].point<<" ";
cout<<endl;
cout<<"E: ";
for(int i=0;i<13;i++)
cout<<p[2][i].suit<<p[2][i].point<<" ";
cout<<endl;
return 0;
}
Re: uva 555
Your program is ok.
Just change line
Don't print extra spaces at the end of line.
Don't forget to remove your code after getting accepted.![8)](./images/smilies/icon_cool.gif)
Post in existing threads for this problem. Use search by problem number.
http://acm.uva.es/board/search.php?keyw ... 056aa54933
Or post in threads for language C++. Don't open new thread.
![:)](./images/smilies/icon_smile.gif)
Just change line
Code: Select all
qsort(p[i],13,sizeof(p[0][0]),compare);
Don't forget to remove your code after getting accepted.
![8)](./images/smilies/icon_cool.gif)
Post in existing threads for this problem. Use search by problem number.
http://acm.uva.es/board/search.php?keyw ... 056aa54933
Or post in threads for language C++. Don't open new thread.
A person who sees the good in things has good thoughts. And he who has good thoughts receives pleasure from life... Bediuzzaman
-
- New poster
- Posts: 10
- Joined: Fri Nov 21, 2014 9:18 am
Re: 555 - Bridge Hands
Code: Select all
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
char values[13][2] = {"2","3","4","5","6","7","8","9","T","J","Q","K","A"};
char suits[4][2] = {"C","D","S","H"};
typedef vector<int> vi;
int valConv(char s)
{
switch(s)
{
case '2': return 1;
case '3': return 2;
case '4': return 3;
case '5': return 4;
case '6': return 5;
case '7': return 6;
case '8': return 7;
case '9': return 8;
case 'T': return 9;
case 'J': return 10;
case 'Q': return 11;
case 'K': return 12;
case 'A': return 13;
}
}
void getDeck(vi& deck, char hand[])
{
for(int i = 0; hand[i] != '\0'; i+=2)
{
int val;
if(hand[i] == 'C')
val = 0;
else if(hand[i] == 'D')
val = 13;
else if(hand[i] == 'S')
val = 26;
else if(hand[i] == 'H')
val = 39;
val += valConv(hand[i+1]);
deck.push_back(val);
}
}
void printHand(int round[4][13], int loc)
{
for(int j = 0; j < 13; j++)
{
printf("%s%s ", suits[(round[loc][j]-1)/13], values[(round[loc][j]-1)%13] );
}
printf("\n");
}
int main()
{
freopen("input.txt","r",stdin);
//char pos[3];
char line1[150],line2[150];
vi deck;
int round[4][13], loc;
//while(scanf("%s", pos) && pos[0] != '#')
while(true)
{
char pos;
scanf(" %c", &pos);
//cin >> pos;
if(pos == '#')
break;
scanf("%s", line1);
scanf("%s", line2);
strcat(line1,line2);
//printf("%s\n", line1);
getDeck(deck, line1);
if(pos == 'N')
loc = 0;
else if(pos == 'E')
loc = 1;
else if(pos == 'S')
loc = 2;
else if(pos == 'W')
loc = 3;
//cout << loc << endl;
int j = 0;
loc++;
for(int i = 0; i < deck.size(); i++)
{
if ((i > 0) && (i % 4 == 0))
j++;
round[(loc++)%4][j] = deck[i];
}
for(int i = 0; i < 4; i++)
{
sort(round[i], round[i]+13);
}
printf("S: ");
printHand(round,2);
printf("W: ");
printHand(round,3);
printf("N: ");
printHand(round,0);
printf("E: ");
printHand(round,1);
}
return 0;
}
-
- New poster
- Posts: 10
- Joined: Fri Nov 21, 2014 9:18 am
Re: 555 - Bridge Hands
I got AC Thanks all .