Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

感觉它的编译器有问题

Posted by wangzhikun at 2011-05-23 11:39:54 on Problem 1002
那位大牛看看我的有什么问题。
表示gcc,g++,MS VC++全部通过测试。先前用气泡排序,提示超时。改进了排序算法,快速排序倒退成WA了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void QSort(char (*tel)[8],long low, long high);
char map[]="2223334445556667-77888999-";
int main(void) {
  long i,j;
  long n;           // sum of tel
  long count=1;     // count duplicates
  char (*tel)[8],ch;
  scanf("%ld",&n);
  tel = (char (*)[8])malloc(n*sizeof(char [8]));
  if (!tel) exit(1);   // overflow
  ch = getchar();      // eliminate line break '\n'
  for (i=0; i<n; i++) {
    j = 0;
    while ((ch = getchar()) != EOF) {
      if (ch=='-' || ch == 'Q' || ch == 'Z')
        continue;      // ignore '-' 'Q' 'Z' chars
      if (j<7) {
        if (ch>='A' && ch<'Z')
          tel[i][j++] = map[ch-'A'];  // convert to num
        else if (ch>='0' && ch<='9')
          tel[i][j++] = ch;
      }
      else if (j==7)
        tel[i][j++] = '\0';
      if (ch=='\n') break;   // fflush(stdin)
    }
  }
  QSort(tel,0,n-1);
  if (n==1) printf("No duplicates.\n");
  for (i=0; i<n-1; i++) {
    long m=0;
    if (strcmp(tel[i],tel[i+1])<0) {
      if (count>1) {
        for (j=0; j<7; j++) { // output duplicates
          putchar(tel[i][j]);
          if (j==2) putchar('-');
        }
        printf(" %ld\n",count);
        count = 1;   // reset count
      }
      else
        m++;         // no duplicates count
    }
    else
      count++;       // duplicates count
    if (m==n-1) printf("No duplicates.\n");
  }
  if (count>1) {     // last duplicates
    for (j=0; j<7; j++) {
      putchar(tel[i][j]);
      if (j==2) putchar('-');
    }
    printf(" %ld\n",count);
  }
  free(tel);  tel = NULL;// free memory
  return 0;
} 
void QSort(char (*tel)[8],long low, long high){
  long left = low; long right = high;
  char pivot[8];
  if (left>=right)
    return;
  memcpy(pivot,tel[left],8);
  while (left<right){
    while (left<right && strcmp(tel[right],pivot)>=0)
      right--;
    memcpy(tel[left],tel[right],8);
    while (left<right && strcmp(tel[left],pivot)<=0)
      left++;
    memcpy(tel[right],tel[left],8);
  }
  memcpy(tel[left],pivot,8);
  QSort(tel,low,left-1);
  QSort(tel,left+1,high);
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator