POJ_1230_Pass-Muraille
2010-07-03 14:52
337 查看
///贪心,计算出每一列所能遇到的wall的数目,对于每一列,若wall数目小于k则判断下一列,否则 //对这列进行如下操作:找出起点不大于当前列而终点不小于当前列的墙,取其中终点减去当前列最大 //的那面墙,将其删去,(这里是贪心,即去掉对后面影响最大的墙),同时还要更新每一列的墙数 //num[i]的值。 #include<stdio.h> #include<string.h> int num[105],wall[105][4]; int n,k,ans; int sort() { int i,j; for(i=1;i<n;i++) { for(j=0;j<n-1;j++) { if(wall[j][0]>wall[j+1][0]) { int t; t=wall[j][0];wall[j][0]=wall[j+1][0];wall[j+1][0]=t; t=wall[j][2];wall[j][2]=wall[j+1][2];wall[j+1][2]=t; } } } return 0; } int main() { int i,j,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); memset(num,0,sizeof(num)); ans=0; for(i=0;i<n;i++) { scanf("%d%d%d%d",&wall[i][0],&wall[i][1],&wall[i][2],&wall[i][3]); if(wall[i][0]>wall[i][2]) { int temp; temp=wall[i][0]; wall[i][0]=wall[i][2]; wall[i][2]=temp; } for(j=wall[i][0];j<=wall[i][2];j++) num[j]++; } sort(); for(i=0;i<101;i++) { while(num[i]>k) { int max=-1,p; for(j=0;j<n;j++) { if(wall[j][0]<=i&&wall[j][2]>=i&&wall[j][2]>max) { max=wall[j][2]; p=j; } if(wall[j][0]>i) break; } for(j=wall[p][0];j<=wall[p][2];j++) { num[j]--; } wall[p][0]=0;wall[p][2]=0;ans++; } } printf("%d/n",ans); } return 0; }
相关文章推荐
- poj 1230 Pass-Muraille
- poj 1230 Pass-Muraille 贪心
- POJ 1230 Pass-Muraille 笔记
- POJ 1230 Pass-Muraille
- poj 1230 Pass-Muraille
- POJ 1230 Pass-Muraille 贪心
- POJ 1230 Pass-Muraille (贪心)
- POJ-1230-Pass-Muraille
- POJ 1230 Pass-Muraille 贪心
- (贪心5.1.1)POJ 1230 Pass-Muraille
- POJ-1230 Pass-Muraille
- (贪心5.1.1)POJ 1230 Pass-Muraille
- POJ 1230 Pass-Muraille
- poj1230 Pass-Muraille (Greedy)
- POJ 1230 Pass-Muraille
- poj 1230 Pass-Muraille( 贪心 )
- POJ 1230 Pass-Muraille (贪心)
- POJ 1230 Pass-Muraille#贪心+vector迭代器用法
- poj1230 Pass-Muraille 贪心算法,形成良好的代码风格很重要
- POJ 2240 && ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0