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

wa了一个上午,谁能帮我看看,是不是有什么陷阱,我是3次排序做的,每个词排一次,所有词排一次,分组后在排一次,应该是比较简单的吧

Posted by cpp051300448324 at 2005-05-19 12:04:29 on Problem 2408
#include<iostream>
#include<cstring>
#include<algorithm>
#include<fstream>
#define min(a,b) (a<b?a:b)
using namespace std;
struct tag_1{
    char str[50];    //存储的每个词
    char str_cmp[50];  //字典序的这个词
};

struct tag_2{
    tag_1 * p;   //分组的首地址
    int size;    //分组的长度
};  
  
bool cmp_1(tag_1 s1,tag_1 s2){
    int signal=strcmp(s1.str_cmp,s2.str_cmp);
    if(signal!=0)return signal<0;
    else return strcmp(s1.str,s2.str)<0;
}

bool cmp_2(tag_2 s1,tag_2 s2){
    if(s1.size!=s2.size) return s1.size>s2.size;
    else return strcmp((s1.p)->str,(s2.p)->str)<0;
}        



tag_1 s[30000];   //单词
tag_2 ss[30000];   //分组

int main(){
    ifstream cin("tmp.txt");
    int i=0,j;
    int N;
    while(cin>>s[i].str){
        strcpy(s[i].str_cmp,s[i].str);
        sort(s[i].str_cmp,s[i].str_cmp+strlen(s[i].str_cmp));
        i++;
    }
    N=i;
    int pre=0;
    
    sort(s,s+N,cmp_1);
    ss[0].p=s;
    j=1;
    for(i=1;i<N;i++){
        if(strcmp(s[i].str_cmp,s[i-1].str_cmp)!=0){
            ss[j].p=s+i;
            ss[j-1].size=i-pre;
            pre=i;
            j++;
        } 
    } 
    ss[j-1].size=i-pre;
    sort(ss,ss+j,cmp_2);
    int size=min(j,5);
    for(i=0;i<size;i++){
        cout<<"Group of size "<<ss[i].size<<": ";
        for(int k=0;k<ss[i].size;k++){
            cout<<(ss[i].p+k)->str<<' ';
        }
        cout<<'.'<<endl;
    }
    system("pause");
    return 0;
}            
          
            
        
    

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