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 |
很怪异,一直RuntimeError。能帮我看看吗?#include <iostream> using namespace std; int stand[]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,-1,7,7,8,8,8,9,9,9,-1}; int Partition(int **a,int low,int high) { int pivotkey[1][2]; pivotkey[0][0]=a[low][0]; pivotkey[0][1]=a[low][1]; while(low<high) { while( (low<high) && (a[high][0]>=pivotkey[0][0]) ) --high; a[low][0]=a[high][0]; a[low][1]=a[high][1]; while( (low<high) && (a[low][0]<=pivotkey[0][0]) ) ++low; a[high]=a[low]; } a[low][0]=pivotkey[0][0]; a[low][1]=pivotkey[0][1]; return low; } void QSort(int **a,int low,int high) { int p=Partition(a,low,high); while(p>low) { p=Partition(a,low,p-1); } while(p<high) { p=Partition(a,p+1,high); } } int main() { int i; freopen("in.txt","r",stdin); int n; cin>>n; int amount=n; int **a=new int*[amount+1]; for(i=0;i<amount+1;i++) { a[i]=new int[2]; } for(i=0;i<amount+1;i++) { a[i][0]=-1; a[i][1]=-1; } while(n--) { int tmp=0; //标准化后的值 int h=0; int d=1000000; while(h<7) { char chr; cin>>chr; if( (chr>=48) && (chr<=57) ) { tmp+=(chr-48)*d; d/=10; h++; } else if( (chr>=65) && (chr<=90) ) { tmp+=stand[chr-65]*d; d/=10; h++; } } //把数一个一个插入到二叉搜索树 bool flag=true; int dup=0; int cur=1; while(flag) { if(a[cur][0]==-1) { a[cur][0]=tmp; a[cur][1]=0; flag=false; dup++; //有多少个不同的数 } else if(a[cur][0]==tmp) { a[cur][1]++; flag=false; } else if(a[cur][0]>tmp) { cur*=2; } else { cur=cur*2+1; } } } /* for(i=0;i<amount;i++) { int p=a[i][0]/10000; cout<<p<<"-"<<a[i][0]-p*10000<<" "<<a[i][1]+1<<endl; } */ //第一步,完成完全二叉树,随便判断是否为No duplicates. bool flag=false; int **b=new int*[amount+1]; for(i=0;i<amount+1;i++) { b[i]=new int[2]; } int h=0; for(i=0;i<amount+1;i++) { if(a[i][1]>0) { b[h][0]=a[i][0]; b[h][1]=a[i][1]; h++; flag=true; } } if(flag==false) { cout<<"No duplicates."; return 0; } QSort(b,0,h-1); for(i=0;i<h;i++) { int p=b[i][0]/10000; int p2=b[i][0]-p*10000; int c=b[i][1]+1; cout<<p<<"-"; cout<<p2; cout<<" "; cout<<c; cout<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator