| ||||||||||
| 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 | |||||||||
AC,G++AC,C++ACG++ TLE C++ AC,是因为你的代码中对IO接口调用太多导致的,用一个字符数组缓存下,然后一起输出就可以了,我的G++ 94ms,C++不用字符数组缓存 204ms
Code(G++,字符数组缓存):
#include <stdio.h>
#include <string.h>
#include <ctype.h>
const int _MAXN=150;
typedef struct tagCard{
char color;
char number;
bool operator>(const tagCard other){
if(this->color==other.color){
if(isalpha(this->number)&&isalpha(other.number)){
int t1,t2;
if(this->number=='T'){
t1=1;
}
if(this->number=='J'){
t1=2;
}
if(this->number=='Q'){
t1=3;
}
if(this->number=='K'){
t1=4;
}
if(this->number=='A'){
t1=5;
}
if(other.number=='T'){
t2=1;
}
if(other.number=='J'){
t2=2;
}
if(other.number=='Q'){
t2=3;
}
if(other.number=='K'){
t2=4;
}
if(other.number=='A'){
t2=5;
}
return t1>t2;
}
return this->number>other.number;
}
int t1,t2;
if(this->color=='C'){
t1=1;
}
if(this->color=='D'){
t1=2;
}
if(this->color=='S'){
t1=3;
}
if(this->color=='H'){
t1=4;
}
if(other.color=='C'){
t2=1;
}
if(other.color=='D'){
t2=2;
}
if(other.color=='S'){
t2=3;
}
if(other.color=='H'){
t2=4;
}
return t1>t2;
}
}Card;
char start;
Card cards[53];
Card N[14],E[14],S[14],W[14];
void swapCard(Card &a,Card &b){
Card tmp=a;
a=b;
b=tmp;
}
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
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(E[j]>E[j+1]){
swapCard(E[j],E[j+1]);
}
}
}
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(S[j]>S[j+1]){
swapCard(S[j],S[j+1]);
}
}
}
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(W[j]>W[j+1]){
swapCard(W[j],W[j+1]);
}
}
}
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(N[j]>N[j+1]){
swapCard(N[j],N[j+1]);
}
}
}
//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;
}
C++,直接调用printf
#include <stdio.h>
#include <string.h>
#include <ctype.h>
const int _MAXN=150;
typedef struct tagCard{
char color;
char number;
bool operator>(const tagCard other){
if(this->color==other.color){
if(isalpha(this->number)&&isalpha(other.number)){
int t1,t2;
if(this->number=='T'){
t1=1;
}
if(this->number=='J'){
t1=2;
}
if(this->number=='Q'){
t1=3;
}
if(this->number=='K'){
t1=4;
}
if(this->number=='A'){
t1=5;
}
if(other.number=='T'){
t2=1;
}
if(other.number=='J'){
t2=2;
}
if(other.number=='Q'){
t2=3;
}
if(other.number=='K'){
t2=4;
}
if(other.number=='A'){
t2=5;
}
return t1>t2;
}
return this->number>other.number;
}
int t1,t2;
if(this->color=='C'){
t1=1;
}
if(this->color=='D'){
t1=2;
}
if(this->color=='S'){
t1=3;
}
if(this->color=='H'){
t1=4;
}
if(other.color=='C'){
t2=1;
}
if(other.color=='D'){
t2=2;
}
if(other.color=='S'){
t2=3;
}
if(other.color=='H'){
t2=4;
}
return t1>t2;
}
}Card;
char start;
Card cards[53];
Card N[14],E[14],S[14],W[14];
void swapCard(Card &a,Card &b){
Card tmp=a;
a=b;
b=tmp;
}
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
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(E[j]>E[j+1]){
swapCard(E[j],E[j+1]);
}
}
}
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(S[j]>S[j+1]){
swapCard(S[j],S[j+1]);
}
}
}
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(W[j]>W[j+1]){
swapCard(W[j],W[j+1]);
}
}
}
for(int i=0;i<count-1;i++){
for(int j=0;j<count-1-i;j++){
if(N[j]>N[j+1]){
swapCard(N[j],N[j+1]);
}
}
}
//print
printf("South player:\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",S[i].number,S[i].number);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf(" %c |",S[i].color);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",S[i].number,S[i].number);
}
printf("\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("West player:\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",W[i].number,W[i].number);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf(" %c |",W[i].color);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",W[i].number,W[i].number);
}
printf("\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("North player:\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",N[i].number,N[i].number);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf(" %c |",N[i].color);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",N[i].number,N[i].number);
}
printf("\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("East player:\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",E[i].number,E[i].number);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf(" %c |",E[i].color);
}
printf("\n");
printf("|");
for(int i=0;i<count;i++){
printf("%c %c|",E[i].number,E[i].number);
}
printf("\n");
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
printf("\n");
}
return 0;
}
其实不用写冒泡,直接调用qsort排序也是可以的,感觉我写多了,我改一下qsort能使代码变得更短些
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator