总结
2016-08-15 16:11
169 查看
T1
题目描述
输入
第1行: 2个用空格隔开的整数:N 和 T第2..N+1行: 第i+1行为1个整数:R_i
输出
第1..T行: 第i行为1个整数,表示iCow播放的第i首曲子
样例输入
3 4 10 8 11
样例输出
3 1 2 3
数据范围限制
提示
每一首曲子播放前,三首曲子的权值分别为:R_1 R_2 R_3
10 8 11 -> 播放 #3 11/2 = 5, 权值余量 = 1
16 13 0 -> 播放 #1 16/2 = 8
0 21 8 -> 播放 #2 21/2 = 10, 权值余量 = 1
11 0 18 -> 播放 #3 ...
T2
题目描述
万圣节又到了!Farmer John打算带他的奶牛去参加一个化装晚会,但是,FJ只做了一套能容下两头总长不超过S(1 <= S <= 1,000,000)的牛的恐怖服装。FJ养了N(2 <= N <= 20,000)头按1..N顺序编号的奶牛,编号为i的奶牛的长度为L_i(1 <= L_i <= 1,000,000)。如果两头奶牛的总长度不超过S,那么她们就能穿下这套服装。FJ想知道,如果他想选择两头不同的奶牛来穿这套衣服,一共有多少种满足条件的方案。
输入
第1行: 2个用空格隔开的整数:N 和 S第2..N+1行: 第i+1为1个整数:L_i
输出
第1行: 输出1个整数,表示FJ可选择的所有方案数。注意奶牛顺序不同的两种 方案是被视为相同的。
样例输入
4 6 3 5 2 1
样例输出
4
数据范围限制
提示
【输出说明】 4种选择分别为:奶牛1和奶牛3;奶牛1和奶牛4;奶牛2和奶牛4;奶牛3和奶牛4。
T3
输入
第1行: 2个用空格隔开的整数:N 和 M第2..M+1行: 每行为2个用空格隔开的整数A、B,描述了参加某一轮比赛的奶 牛的编号,以及结果(编号为A,即为每行的第一个数的奶牛为胜者)
输出
第1行: 输出1个整数,表示排名可以确定的奶牛的数目
样例输入
5 5 4 3 4 2 3 2 1 2 2 5
样例输出
2
数据范围限制
提示
【输出说明】 编号为2的奶牛输给了编号为1、3、4的奶牛,也就是说她的水平比这3头奶 牛都差。而编号为5的奶牛又输在了她的手下,也就是说,她的水平比编号为5的 奶牛强一些。于是,编号为2的奶牛的排名必然为第4,编号为5的奶牛的水平必 然最差。其他3头奶牛的排名仍无法确定。
T4
1155. 贝茜的晨练计划(cowrun)
(File IO): input:cowrun.in output:cowrun.out
时间限制: 1000 ms 空间限制: 262144KB 具体限制
Goto ProblemSet
T4
题目描述
奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。贝茜的体力限制了她跑步的距离。更具体地,如果贝茜选择在第i分钟内跑步,她可以在这一分钟内跑D_i(1 <= D_i <= 1,000)米,并且她的疲劳度会增加1。不过,无论何时贝茜的疲劳度都不能超过M(1 <= M <= 500)。如果贝茜选择休息,那么她的疲劳度就会每分钟减少1,但她必须休息到疲劳度恢复到0为止。在疲劳度为0时休息的话,疲劳度不会再变动。晨跑开始时,贝茜的疲劳度为0。
还有,在N分钟的锻炼结束时,贝茜的疲劳度也必须恢复到0,否则她将没有足够的精力来对付这一整天中剩下的事情。
请你计算一下,贝茜最多能跑多少米。
输入
第1行: 2个用空格隔开的整数:N 和 M第2..N+1行: 第i+1为1个整数:D_i
输出
第1行: 输出1个整数,表示在满足所有限制条件的情况下,贝茜能跑的最大距离
样例输入
5 2 5 3 4 2 10
样例输出
9
数据范围限制
提示
【输出说明】 贝茜在第1分钟内选择跑步(跑了5米),在第2分钟内休息,在第3分钟内跑 步(跑了4米),剩余的时间都用来休息。因为在晨跑结束时贝茜的疲劳度必须 为0,所以她不能在第5分钟内选择跑步。2016.8.15
考试思路:
T1
这题比较简单,其实就是模拟选歌和平均分配权值的过程而已,每次找最大权值的一首歌,输出,然后给除了它自己以外的n-1首歌加上r[i] div (n-1),然后判断能不能整除,如果不能则从1到n,除了自己以外,一个一个加上1,每次给其他权值加上1时,dec(除剩的余数),直到余数变为0则退出这个循环。
T2
这题就更简单了,直接从小到大快排然后两个for循环i从1到n-1,j从i+1到n,暴力枚举每一个l[i]+l[j]是否小于等于s,当然还要加上一点优化,就是如果l[i]+l[j]大于s,则l[i]即使再加后面的l[j]也一定不会满足条件,所以退出内循环,每次满足条件答案加一,就可以了。
T3
这题比赛时没想出方法,只是听见别人说可以用弗洛伊德算法,所以一直围绕这个来想,但也没有想出来。
T4
动态规划。f[i,j]表示第i分钟疲劳值为j的最大路程,因为每次休息都必须休息到疲劳值为0,还有结束时疲劳值一定为0,所以可推出状态转移方程,核心代码如下:
[plain] view
plain copy
for i:=1 to n do
begin
f[i,0]:=f[i-1,0]; //这次的最大值先赋为上次的最大值
for j:=1 to m do
begin
if i>=j then
f[i,0]:=max(f[i,0],f[i-j,j]); //比较现在的最大值和之前在第j分钟时休息哪个更大
f[i,j]:=max(f[i-1,j-1]+a[i],f[i,j]); //比较怎么走值最大
end;
end;
正确思路:
T1
同上。
T2
同上。
T3
使用弗洛伊德算法,把输入的a和b进行处理,f[a,b]:=a,f[b,a]:=a,表示这a和b的胜者为a,也就是他们两个的父亲,然后和常规的弗洛伊德算法一样,三层循环,中转点k放外面,判断f[i,k]是否等于i,而f[k,j]是否等于k,如果成立,则证明i间接性的击败了j,f[i,j]:=i,f[j,i]:=i,最后判断每一只奶牛的父亲和儿子是否累加起来等于n-1,如果是则累加答案,就可以了。核心代码如下:
[plain] view
plain copy
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if (i<>j) and (f[i,j]=0) and (f[i,k]=i) and (f[k,j]=k) then
begin
f[i,j]:=i;
f[j,i]:=i;
end;
for i:=1 to n do
begin
t:=0;
for j:=1 to n do
begin
if f[i,j]<>0 then inc(t);
end;
if t=n-1 then inc(ans);
end;
T4
同上。
相关文章推荐
- Http报文头部
- 如何判断一个整数是多少位
- gulp详细入门教程
- swift - 之TabBarController的用法
- tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项
- 【集训】DP & 搜索 & 线段树
- 隔壁村翠花都这么学会了SQL注入!屠龙宝刀,点击就送
- 数据库连接池(DBCP C3P0)
- POJ3026——Borg Maze
- hdu 5834 Magic boy Bi Luo with his excited tree (树形dp)
- 面试题 各种常用的默认端口号 总结
- PAT乙级(Bascic Level)1037(C++)
- 重写ListView解决与ScrollView的冲突
- SSD MultiBoxLossLayer代码学习记录
- java持续部署脚本
- 查找安卓ANR触发点方法
- OmniGraffle (二)对象的控制
- android service和activity跨进程通讯
- FreeSwitch 终端命令详细介绍
- linux脚本总结