WWX的520
题目描述
520,因为谐音为我爱你,所以也被称之为表白日。
这一天,人们借机把藏在心底的洪荒之力通过表白、撒娇、传情、送礼、结婚等形式释放出来,商家也会趁势开展各类优惠促销活动,掀起一波或浪漫或虐狗的节日热浪。
这一天,也是送男朋友礼物、送女朋友礼物、送自己礼物、送亲朋好友礼物的好时机。
在520即将到来之际,wwx准备为她的女朋友购买一批礼物。于是他列出了一份礼物清单,但由于预算有限,必须删掉一种礼物。经过深思熟虑,他决定删掉价格第k高的礼物,你能帮帮他,找出是哪一种礼物吗?
输入描述:
1 | 第一行是一个整数T(1<=T<=80),表示有T组数据. |
输出描述:
1 | 对于每组输入数据,依次输出它的组号和要删去的礼物的名字和价格,以空格间隔。 |
示例1
输入
1 | 2 |
输出
1 | #1: Apple 18 |
备注:
1 | 1. |
题解
直接按照价格从大到小排序,如果价格相同按照字母序从大到小排序。排完序之后直接输出第k位的礼物名称与价格即可。
代码
1 | #include<iostream> |
配环境
题目描述
黑猫在给校赛配环境,结果被服务器的各种入站规则出站规则搞得头疼,想到自己要上传GVIM、EMACS、VSCODE、Jetbrain全家桶、Visual Studio、Gedit、Microsoft Office Word、Eclipse等等,完全不知道要要花费多少时间才能上传完校赛需要的环境。
黑猫跑去问ddjing,谁知道ddjing说:“我要去实习了,没功夫解决这个问题,你去问问其他人吧。“
于是黑猫想请你帮他解决这个问题。
服务器总传输速度为每秒M个单位(本题出现的所有单位都统一),黑猫现在需要上传总共n个软件(按优先级顺序从高到低给出),每个软件的大小分别为v1、v2….vn,每个软件为保持稳定连接,上传需要一个最小的传输速度为m1、m2…mn。
服务器带宽分配的策略是:按优先级满足每一个软件要求的传输速度。如果服务器剩余的带宽不能满足某个软件最小传输速度的话,服务器将继续寻找下去,直到找到能满足最小传输速度的软件。
如果目前服务器的总传输速度不能满足所有还需要上传的软件的话,服务器将把传输速度全部给予当前优先级最高的(即使不能满足其最小传输速度)。
如果目前对所有软件都满足了其最小传输速度的话,服务器将把剩余所有传输速度全部给予当前优先级最高的软件。
输入描述:
1 | 第一行给出一个正整数,表示服务器总带宽M |
输出描述:
1 | 输出一行,为上传完毕所有软件所需要的时间,保留两位小数。 |
示例1
输入
1 | 10 |
输出
1 | 1.60 |
示例2
输入
1 | 10 |
输出
1 | 4.50 |
题解
原本是一道水题,结果成功被题面绕进去了。其实只需要把所有软件的大小V加起来除以宽带大小M即可。所谓最小速度都是迷惑人的。
代码
1 | #include<stdio.h> |
下面是一段超时代码,成功将题面的过程给模拟了出来,当时没仔细看数据是怎么得到的,一直超时很不可思议。因此总结出了经验,以后做题一定得分析出数据是怎么得到的,有时候就很容易找到规律或者发现玄机。另外下面的代码总结出了一个新的方法,就是利用滚动数组实现删除元素,虽然vector有删除功能,但删除效率低。以下的方法是利用滚动数组,将未删除的元素重新压入数组,删除的元素不进行操作,然后清空数组,这样循环操作。
1 | #include<iostream> |
iko和她的糖
题目描述
iko超级超级喜欢吃糖,有一天iko想出去玩,她计划从1点走到N点(按1,2,3,…,n的顺序走),每个点都有一个补给站,第i点的补给站有a[i]颗糖,从i点走到i+1点会消耗掉b[i]颗糖,iko在出游的途中可以选择三个补给站,iko想知道她走完全程到达N点时口袋里最多还能剩下几颗糖(初始时iko的口袋里一颗糖都没有)。
输入描述:
1 | 第一行输入N(3<=N<=1000) |
输出描述:
1 | 输出一个数字表示iko到达n点时口袋里最多剩下的糖, |
示例1
输入
1 | 3 |
输出
1 | -1 |
示例2
输入
1 | 5 |
输出
1 | 3 |
题解
首先,3个补给站必须得选择第1个,因为一开始没有糖,而每条路都需要消耗糖,所以必须拿起点的糖。之后就很好理解了,每走一条路记录当前走过的补给站最大的两个,如果哪一条路糖果不够了,就把最大的补给站加上,如果还不够就把次大的也加上。每次记录走到这条路经过的最大补给站记录下来,然后现有糖果减去消耗的糖果,如果为负就把之前的最大补给站的糖果加上。例如第2组数据,初始是3,走到第1条路剩余糖果为0,此时记录的最大补给站是4,然后走到下一条路糖果变成了-2,那就把最大补给站的加上,现在剩余糖果是2。此时最大补给站记录5,再往下走是2,剩余糖果是0,继续走,消耗2个为-2,则加上最大补给站的糖5。最终就是3。
代码
1 | #include<iostream> |
ZQ的睡前故事
题目描述
ZQ是一个拥有n女朋友的万人迷,她的每一个女朋友每天晚上都会挨个给他打电话,要他讲了睡前故事才能睡觉。可是,每次他的女朋友都会挑他在吃鸡的时候打电话,ZQ总是因为挂机被舍友赶出宿舍,于是,ZQ告诉他的女朋友们,别打电话了,他会主动打过去给他们讲故事,再打电话就分手!
于是,ZQ把他的女朋友名字写在纸上,画成一圈,顺时针编号为1~n,然后从1开始顺时针数。在每一次数数中,ZQ数k个就停下来,然后给选中的女朋友打电话讲故事。
输入描述:
1 | 先输入一个t,然后t组数据,每行包含两个数字n,k,n<20,k>0 |
输出描述:
1 | 按顺序输出每轮被选中的女朋友的编号。 |
示例1
输入
1 | 3 |
输出
1 | 3 6 9 2 7 1 8 5 10 4 |
题解
约瑟夫环。由于数据比较水,所以多种方法求解,这里不介绍了。
代码
1 | #include<stdio.h> |
附加:hdu5135 Little Zu Chongzhi’s Triangles
题意:
有n条边组三角形,每个三角形必须由3条边组成,三角形边不可以重复利用,不可以共线,只能是分开的三角形。问这n条边组成的所有三角形的面积和最大为多少。
题解
原本状压dp求解,但数据比较水,因此递归还没有记忆化搜索直接就过了。每次从n条边里面选择3条边组成三角形,方程maxx[i],[j] = max(maxx[i-1],[j],[1~n] );由于状态是集合,因此需要状压以下。这里主要说的是一个常犯的错误。我没找到vis是当前状态是否已经选过,尤其是搜索时vis的作用非常重要。但本题用深搜时犯了一个错误,就是在vis=1,与vis=0之间多了一个continue,即vis=1,continue,dfs,vis=0,导致状态更改,数据一直错误。正确顺序应该是continue,vis=1,dfs,vis=0。因此之后比赛时一定要注意此细节。在vis=1与vis=0之间一定要注意是否有其他条件导致循环结束而状态还未还原。
代码
1 | #include<iostream> |