题目描述
火灾啦!火灾啦!有n名受困学生,分布在各个楼层。火灾发生时,这n名同学在利用课室中的求救器发出n条求救信息。每条求救短信息中,都说明了发出求救信号的学生所在的楼层,用1-12之间的整数表示。
消防车很快就到达了学校,消防战士有两种不同的方式救出被困的同学:
|------------------------------------------------|
| (1)由消防战士冒着危险上到对应楼层,每次只能救出一名同学,需花费1个单位时间 |
| (2)使用消防车的云梯,直接上升到对应楼层,一次可以救出所在楼层所有同学,需花费k个单位时间 |
特别说明:如果(1)和(2)两种方式的花费时间一样,优先使用方式(2),也就是优先使用云梯进行救援。
你的任务是帮助消防队算出每层应该使用什么方式进行救援,以及统计救出所有同学的最短时间是多少。
每个楼层用宽100、高50的、2号色的空心长方形表示,若该楼层没有被困学生则长方形内填充8号色,若该楼层使用方式(1)进行救援则长方形内填充1号色,若该楼层使用方式(2)进行救援则长方形内填充5号色。最后在教学楼底部,画一张椭圆形的救生垫,救生垫横半径为最短救援时间*5(数据保证横半径≤375)、纵半径为25、9号色,圆心与一楼长方形中心距离为50。
输入格式
第一行,2个整数n和k。(5≤n≤100,1≤k≤10)。
第二行,n个正整数,表示每个同学被困的楼层。(1≤楼层≤12)
输出格式
正确的图形。
输入/输出例子1
输入:
10 2
2 1 4 5 2 4 5 5 7 12
输出:

参考答案
cpp
int main()
{
int n, k;
cin >> n >> k;
int cnt[13];
for(int i=0;i<n;i++)
cnt[i]=0;
for (int i = 0; i < n; i++)
{
int floor;
cin >> floor;
cnt[floor]++;
}
int Color[13];
int totalTime = 0;
for (int i = 1; i <= 12; i++)
{
int num = cnt[i];
if (num == 0)
{
Color[i] = 8;
continue;
}
int timeSingle = num;
int timeLadder = k;
int useTime;
if (timeLadder <= timeSingle)
{
Color[i] = 5;
useTime = timeLadder;
}
else
{
Color[i] = 1;
useTime = timeSingle;
}
totalTime += useTime;
}
p.up().moveTo(0, -300);
for(int i = 1;i <= 12; i++)
{
p.r(100, 50).rr(96, 46, Color[i]);
p.fd(50);
}
p.bk(50 * 12 + 50).ee(totalTime * 5, 25, 9);
p.hide();
return 0;
}
题目链接:
https://v1.51goc.com/question/viewProgram/118866
(进去后要登录)