1 条题解
-
0
问题含义分析
- 名片打印:名片以固定的()网格结构进行打印,并且该网格的大小不能改变。
- 尺寸限制:每张名片的尺寸为()厘米,纸张的尺寸为()厘米。所有这些尺寸参数均为正整数。
- 放置要求:网格必须与纸张的边缘垂直。它可以旋转(90)度,并且名片可以放置在纸张上的任何位置。
- 裁切规则:裁切机一次只能裁切一张纸,并且裁切必须贯穿整张纸,不能在中间停止。
- 输入与输出:输入由六个正整数()、()、()、()、()和()组成。输出要么是最少的裁切次数,要么是一条提示纸张太小的信息。
解题思路
- 判断能否放置:
- 尝试两种放置方式(不旋转和旋转(90)度),并分别计算每种情况下所需纸张的最小尺寸。
- 当不旋转时,所需纸张的最小尺寸为()(长)和()(宽);当旋转(90)度时,所需纸张的最小尺寸为()(长)和()(宽)。
- 如果两种放置方式下所需纸张的最小尺寸都大于给定纸张的尺寸,这就意味着纸张太小,此时输出 “The paper is too small.”。
- 计算裁切次数:
- 对于能够放置的情况,计算裁切次数。
- 裁切次数等于将名片网格在纸张上完全分开所需的横向裁切次数与纵向裁切次数之和。
- 横向裁切次数为()(用于在横向上分开()张名片),纵向裁切次数为()(用于在纵向上分开()张名片)。总的裁切次数为()(先进行横向裁切,然后进行纵向裁切)。
标程
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; int main() { int a,b,c,d,e,f; while(cin>>a>>b>>c>>d>>e>>f) { if(a==0&& b==0 && c==0 && d==0 && e==0 && f==0) { break; } int ta=a*c; int tb=b*d; int jg=2000000; if(ta<=e && tb<=f) { int t=0; if(ta<e)t++; if(tb<f)t++; t+=a*b-1; jg=min(t,jg); } if(ta<=f&& tb<=e) { int t=0; if(ta<f)t++; if(tb<e)t++; t+=a*b-1; jg=min(t,jg); } ta=a*d; tb=b*c; if(ta<=e && tb<=f) { int t=0; if(ta<e)t++; if(tb<f)t++; t+=a*b-1; jg=min(t,jg); } if(ta<=f&& tb<=e) { int t=0; if(ta<f)t++; if(tb<e)t++; t+=a*b-1; jg=min(t,jg); } if(jg==2000000) { cout<<"The paper is too small."<<endl; }else { cout<<"The minimum number of cuts is "<<jg<<"."<<endl; } } return 0; }
- 1
信息
- ID
- 792
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 2
- 上传者