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 shangmin at 2005-08-29 11:26:27 on Problem 2597
我是按照contest report上的算法写的,测试数据也过了,可是提交就是wa,各位大虾帮忙看看,谢谢。

#include<stdio.h>
int matrix[81][81];
int matrix1[81][81];
void shellsort(int *a,int *tag,int n)
{
	int gap,i,j,t;
		gap=n/2;
		while(gap>0)
		{
			for(i=gap+1;i<=n;i++)
			{
				j=i-gap;
				while(j>0)
				{
					if(*(a+2*(*(tag+j)))>*(a+2*(*(tag+j+gap))))
					{
						t=*(tag+j);
						*(tag+j)=*(tag+j+gap);
						*(tag+j+gap)=t;
						j=j-gap;
					}
					else
						j=0;
				}
			}
			gap=gap/2;
		}
}
void caculate(int M)
{
	int i,j,s,h[81][81];
	for(i=1;i<=M;i++)
		for(j=1;j<=M;j++)
		{
			h[i][j]=0;
			for(s=1;s<=M;s++)
             h[i][j]=h[i][j]+matrix1[i][s]*matrix[s][j];
		}
		for(i=1;i<=M;i++)
			for(j=1;j<=M;j++)
				matrix1[i][j]=h[i][j];
}
int main()
{
    int M,i,j,a[81][2],tag[81],t,t1,max,sum;
	a[0][0]=-10003;
	a[0][1]=-10002;
	tag[0]=0;
	while(scanf("%d",&M)!=EOF)
	{
		for(i=1;i<=M;i++)
		{
			scanf("%d%d",&a[i][0],&a[i][1]);
			if(a[i][0]>a[i][1])
			{
				t=a[i][0];
				a[i][0]=a[i][1];
				a[i][1]=t;
			}
			tag[i]=i;
		}
		i=1;
		max=0;
		shellsort(a,tag,M);
		while(1)
		{
			t=10002;
			t1=-1;
			for(j=i;j<=M;j++)
				if(a[tag[j]][0]>=a[tag[j-1]][1]&&a[tag[j]][1]<t)
				{
                   t1=j;
				   t=a[tag[j]][1];
				}
			if(t1==-1)
				break;
			else
			{
				max++;
				i=t1+1;
			}
            if(i>M)
				break;
		}
		if(max==M)
		printf("0 1\n");
		else
		{
		  if(max==1)
			  printf("%d %d\n",M-1,M);
		  else
		  {
				 for(i=1;i<=M;i++)
		    		for(j=1;j<=M;j++)
			    	   if(i<j&&a[tag[i]][1]<=a[tag[j]][0])
					   {
						   matrix1[i][j]=1;
						   matrix[i][j]=1;
					   }
							else
							{
                                matrix1[i][j]=0;
								matrix[i][j]=0;
							}
				  for(i=1;i<max-1;i++)
				      caculate(M);
				  sum=0;
				  for(i=1;i<=M;i++)
					  for(j=1;j<=M;j++)
						  if(matrix1[i][j]!=0)
							sum=sum+matrix1[i][j];
						  printf("%d %d\n",M-max,sum);
		  }
		}
	}
	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