| ||||||||||
| 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,第二个WA(所有差别都在前9行,其余完全一样),大牛指教啊!!AC的:
#include<iostream>
using namespace std;
#include<algorithm>
int h[]={1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700,1767263190};
int nIndex[]={1,2,4,9,23,65,197,626,2056,6918,23714,82500,290512,1033412,3707852,13402697,48760367,178405157,656043857};
const int hLength=sizeof(h)/sizeof(int);
const int nIndexLength=sizeof(nIndex)/sizeof(int);
void output(int n,int nodes)
{
if(0==n)
return;
if(1==n)
{
cout<<"X";
return;
}
int rest=n-nIndex[nodes-1];
int left=0,right=nodes-1;
while(rest-h[left]*h[right]>=0)
{
rest-=h[left]*h[right];
++left;
--right;
}
int leftIndex=rest/h[right]+nIndex[left-1],rightIndex=rest%h[right]+nIndex[right-1];
if(left!=0)
{
cout<<"(";
output(leftIndex,left);
cout<<")";
}
cout<<"X";
if(right!=0)
{
cout<<"(";
output(rightIndex,right);
cout<<")";
}
}
int main()
{
int n,myNodes;
while(cin>>n&&n!=0)
// for(n=499000000;n<=500000000;++n)
{
myNodes=upper_bound(nIndex,nIndex+nIndexLength,n)-nIndex;
output(n,myNodes);
cout<<endl;
}
return 0;
}
WA的:
#include<iostream>
using namespace std;
#include<algorithm>
long h[]={1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700,1767263190,6564120420};
long nIndex[]={1,2,4,9,23,65,197,626,2056,6918,23714,82500,290512,1033412,3707852,13402697,48760367,178405157,656043857,2423307047,8987427467};
const int hLength=sizeof(h)/sizeof(long);
const int nIndexLength=sizeof(nIndex)/sizeof(long);
void output(int n,int nodes)
{
if(0==n)
return;
if(1==n)
{
cout<<"X";
return;
}
int rest=n-nIndex[nodes-1];
int left=0,right=nodes-1;
while(rest-h[left]*h[right]>=0)
{
rest-=h[left]*h[right];
++left;
--right;
}
int leftIndex=rest/h[right]+nIndex[left-1],rightIndex=rest%h[right]+nIndex[right-1];
if(left!=0)
{
cout<<"(";
output(leftIndex,left);
cout<<")";
}
cout<<"X";
if(right!=0)
{
cout<<"(";
output(rightIndex,right);
cout<<")";
}
}
int main()
{
int n,myNodes;
while(cin>>n&&n!=0)
// for(n=499000000;n<=500000000;++n)
{
myNodes=upper_bound(nIndex,nIndex+nIndexLength,n)-nIndex;
output(n,myNodes);
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