| ||||||||||
| 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 | |||||||||
经过啊拉,一天的努力终于搞定着,现在共享我的程序,共大家参考(已经通过)
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct _WALLS
{
int nStartx;
int nStarty;
int nEndx;
int nEndy;
}WALLS;
void Zeros(int **a,int nRow,int nColumn)
{
int n,m;
for(n=0;n<=nRow;n++)/*//m为列,即是x轴*/
{
for(m=0;m<=nColumn;m++)/*//n为行,即是y轴*/
{
a[n][m]=0;
}
}
}
int PointInWhichWalls(WALLS *pWalls,int nWalls ,int n,int m)
{
int i;
for(i=0;i<nWalls;i++)
{
if( pWalls[i].nStartx<=m && m<=pWalls[i].nEndx && n==pWalls[i].nStarty)
return i;
}
return 0;
}
/*
int GetBadWallIndex(int *pnBadWall,int nWalls,WALLS *pWalls)
{
int max=0;
int i;
int mm=0;
for(i=0;i<nWalls;i++)
{
if (pnBadWall[i]>max)
{
max=pnBadWall[i];
mm=i;
}
}
for(i=0;i<nWalls;i++)
{
if (pnBadWall[i]==max)
{
if( (pWalls[i].nEndx-pWalls[i].nStartx) > (pWalls[mm].nEndx-pWalls[mm].nStartx) )
mm=i;
}
}
return mm;
}
*/
void Sort(int *pnRowWall,int nMaxRow,WALLS *pWalls)
{
int i,j;
int tmp;
for(i=0;i<nMaxRow-1;i++)
{
for(j=i+1;j<nMaxRow;j++)
{
if( (pnRowWall[i]!=-1) && (pnRowWall[j]!=-1) )
{
if( pWalls[pnRowWall[i]].nEndx < pWalls[pnRowWall[j]].nEndx )
{
tmp=pnRowWall[i];
pnRowWall[i]=pnRowWall[j];
pnRowWall[j]=tmp;;
}
}
}
}
}
void main()
{
/*FILE *pf;*/
int i,j;
int n,m,m2;
int tmp; /*//交换变量*/
/*//int a[MAX][MAX]={0};*/
int **a;
int k;
int nTime;
int nWalls;
WALLS *pWalls;
int *pnRowWall;
int nMaxColumn=0; /*//最大列**/
int nMaxRow=0; /*//最大行*/
int nColumnCount=0;
int nDesWall;
int flag=0;
int nResult=0;
/*pf=fopen("in.txt","r");
fscanf(pf,"%d",&nTime);*/
scanf("%d",&nTime);
for(i=0;i<nTime;i++)
{
/*fscanf(pf,"%d%d\n",&nWalls,&k);*/
scanf("%d %d\n",&nWalls,&k);
pWalls=(WALLS *)malloc(sizeof(WALLS)*nWalls);
for(j=0;j<nWalls;j++)
{
/*fscanf(pf,"%d%d%d%d\n",
&pWalls[j].nStartx,//x为列
&pWalls[j].nStarty,//y为行
&pWalls[j].nEndx,
&pWalls[j].nEndy);*/
scanf("%d %d %d %d\n",
&pWalls[j].nStartx,/*//x为列*/
&pWalls[j].nStarty,/*//y为行*/
&pWalls[j].nEndx,
&pWalls[j].nEndy);
/* 交换起终点 */
if(pWalls[j].nStartx > pWalls[j].nEndx)
{
tmp=pWalls[j].nStartx;
pWalls[j].nStartx=pWalls[j].nEndx;
pWalls[j].nEndx=tmp;
}
if(pWalls[j].nEndx > nMaxColumn)
nMaxColumn=pWalls[j].nEndx;
if(pWalls[j].nStarty > nMaxRow)
nMaxRow=pWalls[j].nStarty;
}
pnRowWall=(int *)malloc(sizeof(int)*(nMaxRow+1));
a=(int **)malloc(sizeof(int *)*(nMaxRow+1));
for(j=0;j<=nMaxRow;j++)
{
a[j]=(int *)malloc(sizeof(int)*(nMaxColumn+1));
pnRowWall[j]=-1;
}
Zeros(a, nMaxRow, nMaxColumn);
for(j=0;j<nWalls;j++)
{
for(m=pWalls[j].nStartx;m<=pWalls[j].nEndx;m++)
{
a[pWalls[j].nStarty][m]=1;
}
}
/*
//---------------------
//查看打印值
printf("\n-------------------\n");
for(n=0;n<=nMaxRow;n++)
{
for(j=0;j<=nMaxColumn;j++)
{
printf("%d ",a[n][j]);
}
printf("\n");
}
//---------------------*/
for(m=0;m<=nMaxColumn;m++)/*//m为列,即是x轴*/
{
nColumnCount=0;
for(n=0;n<=nMaxRow;n++)/*//n为行,即是y轴*/
{
if(a[n][m]==1)
nColumnCount++;
}
if(nColumnCount>k) /*//循环扫描nColumnCount-k次*/
{
j=0;
flag=1;
for(n=0;n<=nMaxRow;n++)
{
if(a[n][m]==1)
{
nDesWall=PointInWhichWalls(pWalls,nWalls,n,m);
pnRowWall[j]=nDesWall;
j++;
}
}
Sort(pnRowWall,j,pWalls);
/*remove nColumnCount-k block walls*/
for(j=0;j<nColumnCount-k;j++)
{
for(m2=pWalls[ pnRowWall[j] ].nStartx; m2<=pWalls[ pnRowWall[j] ].nEndx; m2++)
{
a[ pWalls[pnRowWall[j]].nStarty ][m2]=0;
}
/*
//---------------------
//查看打印值
printf("\n-------------------\n");
for(n=0;n<=nMaxRow;n++)
{
for(m2=0;m2<=nMaxColumn;m2++)
{
printf("%d ",a[n][m2]);
}
printf("\n");
}
//---------------------*/
nResult++;
}
}
if(flag)
{
flag=0;
for(j=0;j<nMaxRow;j++)
{
pnRowWall[j]=-1;
}
}
}
printf("%d\n",nResult);
nResult=0;
free(pWalls);
free(pnRowWall);
for(j=0;j<=nMaxRow;j++)
{
free(a[j]);
}
free(a);
}
/*fclose(pf);*/
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator