ACM第十六题思考及解答
来源:互联网 发布:java小型超市管理系统 编辑:程序博客网 时间:2024/06/18 11:36
题目如下:
矩形嵌套
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。
- 输入
- 第一行是一个正正数N(0<N<10),表示测试数据组数,
每组测试数据的第一行是一个正正数n,表示该组测试数据中含有矩形的个数(n<=1000)
随后的n行,每行有两个数a,b(0<a,b<100),表示矩形的长和宽 - 输出
- 每组测试数据都输出一个数,表示最多符合条件的矩形数目,每组输出占一行
- 样例输入
1101 22 45 86 107 93 15 812 109 72 2
- 样例输出
5
解题思路:
主要核心思想:寻找所有的矩形中最小的一个与存储的矩形逐一嵌套对比可以嵌套计数器加一即可。
看完题目脑袋自动脑补为啥要旋转90度,考虑那么复杂,无论你输入多少,长大于宽或者宽大于长,我直接定制一个格式,最后输出的都是长大于宽(我存储的也是长一定大于等于宽),可以规避旋转问题。
接下来主要思路,就是设置所有的矩形中最小的为初始比较值,每次存储的时候和上一次初始比较值进行比较,比之前存储的小的就替换,大的则跳过,依次可以存储到最小的一个值,这样的目的是为了以后寻找最多可以嵌套多少个矩形做准备。
代码如下:
#include<stdio.h>
typedef struct chang{
int a;//chang
int b;//kuan
}ch;
void swap(int *p1,int *p2)
{
int temp=0;
temp=*p1;
*p1=*p2;
*p2=temp;
}
//static int count=0;
int qiantao(int num1,int buf1[100][3],int lenmin,int widmin)
{
int k=0,count=0;
for(k=0;k<num1;k++)
{
if((buf1[k][0]>lenmin)&&(buf1[k][1]>widmin))
{
count++;
}
}
return count;
}
int buf[100][3]={};
int main()
{
ch c;
int num=0,i=0;
int lenmin=0,widmin=0;
int num1=0,j=0,count1=0;
printf("please input num about testing groups!\n");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("please input no.%d group num1 about testing rectangle\n",i+1);
scanf("%d",&num1);
for(j=0;j<num1;j++)
{
printf("please input no.%d rectangle a(length) and b(width)\n",j+1);
scanf("%d,%d",&c.a,&c.b);
if(c.a<c.b)
{swap(&c.a,&c.b);};
buf[j][0]=c.a;
buf[j][1]=c.b;
lenmin=buf[0][0];
widmin=buf[0][0];
if((buf[j][0]<lenmin)&&(buf[j][1])<widmin)
{
lenmin=buf[j][0];
widmin=buf[j][1];
// swap(&buf[j][0],&lenmin);
// swap(&buf[j][1],&widmin);
}
}
count1=qiantao(num1,buf,lenmin,widmin);
}
for(i=0;i<num;i++)
{
for(j=0;j<num1;j++)
{
printf("groups=no.%d,num1=%d,length=%d,width=%d\n",i+1,j+1,buf[j][0],buf[j][1]);
}
printf("the suitable a and b is=%d\n",count1);
}
return 0;
}
1 0
- ACM第十六题思考及解答
- 关于ACM练习第八题的思考和解答
- 笔试题及解答
- 有关“树上剩余几只鸟”的问题的思考及解答
- acm后缀数组学习_相关题目及解答思路、
- vxworks测试题及解答
- 华为笔试题及解答
- google笔试题及解答
- vxworks测试题及解答
- VxWorks测试题及解答
- java笔试题及解答
- ACM常见问题解答
- ACM常见问题解答
- day_5-acm 好题思考好方法
- 第十六周ACM(1)
- 几道简单ACM题的解答----1
- 几道简单ACM题的解答----2
- 几道简单ACM题的解答----3
- Android-GridView的图文列表显示
- Html提示框(fieldset标签)
- oc基础
- 【杭电-oj】 -1060-Leftmost Digit(输出n的n次方最左边数)
- 有序广播
- ACM第十六题思考及解答
- 括号配对问题
- hdu 1129 Diophantus of Alexandria
- C# Process.Start()方法详解
- 如果看了这篇文章还不懂卷积,那就过来掐死我吧
- 时间序列分析及应用 R语言 读书笔记 02
- Uva 10600 ACM Contest and Blackout(次小生成树)
- (2.2.6.1)Ant入门基础教程
- 第八周项目一(1) 数组做数据成员(工资类2 指针做法)