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 zhb_msqx at 2007-08-29 13:36:36 on Problem 1095
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;


long int a[100]={0,1,3,8,22,64,196,625,2055,6917,23713,82499,290511,1033411,3707851,13402696,48760366,178405156,656043856};
long int b[100]={1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700};


string func(int i,int pth){     //p代表有几个棒子,pth代表p个棒子的第pth中排列
	if(i==0)return "";
	else if(i==1)return "(X)";
	else if(i==2){
		if(pth==1)return"(X(X))";
		else return "((X)X)";
	}
	int last=pth;
	int sum=0;
	int left;int right;
	for(int s=0;s<i;s++){
		sum+=b[s]*b[i-s-1];
		if(sum>=last){
			left=s;right=i-s-1;
			sum-=b[s]*b[i-s-1];
			break;
		}
	}
	
	for(s=1;s*b[right]<=last-sum;s++){}
	return ("("+func(left,s-1)+"X"+func(right,last-sum-(s-1)*b[right])+")");
}

string cal(int n){
	if(n==0)return "";
	else if(n==1)return "X";
	else if(n==2)return"X(X)";
	else if(n==3)return "(X)X";
		
	for(int i=0;a[i]<n;i++){}
	
	int last=n-a[i-1];
	int sum=0;

	int left;int right;
	for(int s=0;s<i;s++){
		sum+=b[s]*b[i-s-1];
		if(sum>=last){
			left=s;right=i-s-1;
			sum-=b[s]*b[i-s-1];
			break;
		}
	}
	
	for(s=1;s*b[right]<=last-sum;s++){}

	return (func(left,s-1)+"X"+func(right,last-sum-(s-1)*b[right]));
//	return "";
}

void main(){
	int n;
	while(1){
		cin>>n;
		if(n==0)break;
		cout<<cal(n)<<endl;
	}
}

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