| ||||||||||
| 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 | |||||||||
Re:AC,G++AC,C++ACIn Reply To:AC,G++AC,C++AC Posted by:kuaichenyang at 2015-11-22 01:12:55 我改用qsort排序,再用字符数组缓存,G++ AC 74ms,4457B
4685B->4980->4457B,开心
Code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
const int _MAXN=150;
typedef struct tagCard{
char color;
char number;
}Card;
char start;
Card cards[53];
Card N[14],E[14],S[14],W[14];
int cmp(const void *a,const void *b){
Card A=*((Card *)a);
Card B=*((Card *)b);
if(A.color==B.color){
if(isalpha(A.number)&&isalpha(B.number)){
int t1,t2;
if(A.number=='T'){
t1=1;
}
if(A.number=='J'){
t1=2;
}
if(A.number=='Q'){
t1=3;
}
if(A.number=='K'){
t1=4;
}
if(A.number=='A'){
t1=5;
}
if(B.number=='T'){
t2=1;
}
if(B.number=='J'){
t2=2;
}
if(B.number=='Q'){
t2=3;
}
if(B.number=='K'){
t2=4;
}
if(B.number=='A'){
t2=5;
}
return t1-t2;
}
return A.number-B.number;
}
int t1,t2;
if(A.color=='C'){
t1=1;
}
if(A.color=='D'){
t1=2;
}
if(A.color=='S'){
t1=3;
}
if(A.color=='H'){
t1=4;
}
if(B.color=='C'){
t2=1;
}
if(B.color=='D'){
t2=2;
}
if(B.color=='S'){
t2=3;
}
if(B.color=='H'){
t2=4;
}
return t1-t2;
}
int main(){
char input[10];
while(scanf("%s",input),input[0]!='#'){
//init
char str[_MAXN];
char tmp[_MAXN];
scanf("%s",str);
scanf("%s",tmp);
strcat(str,tmp);
int len=strlen(str);
int number=0;
for(int i=0;i<len;i+=2){
cards[++number].color=str[i];
cards[number].number=str[i+1];
}
//work
int count=0;
if(input[0]=='N'){
for(int i=1;i<=number;i+=4){
E[count]=cards[i];
S[count]=cards[i+1];
W[count]=cards[i+2];
N[count++]=cards[i+3];
}
}
if(input[0]=='E'){
for(int i=1;i<=number;i+=4){
S[count]=cards[i];
W[count]=cards[i+1];
N[count]=cards[i+2];
E[count++]=cards[i+3];
}
}
if(input[0]=='S'){
for(int i=1;i<=number;i+=4){
W[count]=cards[i];
N[count]=cards[i+1];
E[count]=cards[i+2];
S[count++]=cards[i+3];
}
}
if(input[0]=='W'){
for(int i=1;i<=number;i+=4){
N[count]=cards[i];
E[count]=cards[i+1];
S[count]=cards[i+2];
W[count++]=cards[i+3];
}
}
//sort
qsort(N,count,sizeof(Card),cmp);
qsort(E,count,sizeof(Card),cmp);
qsort(S,count,sizeof(Card),cmp);
qsort(W,count,sizeof(Card),cmp);
//print
char ans[10][_MAXN];
printf("South player:\n");
ans[0][0]='+';
int sum=1;
for(int i=0;i<count;i++){
ans[0][sum++]='-';
ans[0][sum++]='-';
ans[0][sum++]='-';
ans[0][sum++]='+';
}
ans[0][sum]='\0';
ans[1][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[1][sum++]=S[i].number;
ans[1][sum++]=' ';
ans[1][sum++]=S[i].number;
ans[1][sum++]='|';
}
ans[1][sum]='\0';
ans[2][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[2][sum++]=' ';
ans[2][sum++]=S[i].color;
ans[2][sum++]=' ';
ans[2][sum++]='|';
}
ans[2][sum]='\0';
strcpy(ans[3],ans[1]);
ans[4][0]='+';
sum=1;
for(int i=0;i<count;i++){
ans[4][sum++]='-';
ans[4][sum++]='-';
ans[4][sum++]='-';
ans[4][sum++]='+';
}
ans[4][sum]='\0';
for(int i=0;i<5;i++){
puts(ans[i]);
}
printf("West player:\n");
ans[1][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[1][sum++]=W[i].number;
ans[1][sum++]=' ';
ans[1][sum++]=W[i].number;
ans[1][sum++]='|';
}
ans[1][sum]='\0';
ans[2][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[2][sum++]=' ';
ans[2][sum++]=W[i].color;
ans[2][sum++]=' ';
ans[2][sum++]='|';
}
ans[2][sum]='\0';
strcpy(ans[3],ans[1]);
for(int i=0;i<5;i++){
puts(ans[i]);
}
printf("North player:\n");
ans[1][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[1][sum++]=N[i].number;
ans[1][sum++]=' ';
ans[1][sum++]=N[i].number;
ans[1][sum++]='|';
}
ans[1][sum]='\0';
ans[2][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[2][sum++]=' ';
ans[2][sum++]=N[i].color;
ans[2][sum++]=' ';
ans[2][sum++]='|';
}
ans[2][sum]='\0';
strcpy(ans[3],ans[1]);
for(int i=0;i<5;i++){
puts(ans[i]);
}
printf("East player:\n");
ans[1][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[1][sum++]=E[i].number;
ans[1][sum++]=' ';
ans[1][sum++]=E[i].number;
ans[1][sum++]='|';
}
ans[1][sum]='\0';
ans[2][0]='|';
sum=1;
for(int i=0;i<count;i++){
ans[2][sum++]=' ';
ans[2][sum++]=E[i].color;
ans[2][sum++]=' ';
ans[2][sum++]='|';
}
ans[2][sum]='\0';
strcpy(ans[3],ans[1]);
ans[4][0]='+';
sum=1;
for(int i=0;i<5;i++){
puts(ans[i]);
}
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator