151104的测试总结

来源:互联网 发布:磁条卡读写软件 编辑:程序博客网 时间:2024/04/19 11:44

第一题

【题目及题号】number superoj1002
【题解】
题意大概是求前R个由不同的三次幂组成的数的和。
考虑转换成三进制。
那么就会发现和项数有关。
1:—-1
2:—3-
3:—31
4:—9—
5:—9-1
6:—93-
……
看上去非常像二进制的递增。所以我们可以统计第i位上的3i1分别出现了多少次。

我的做法是递归去求。
对于R,找到一个最大的2k,满足2k<=R,那么

ans=ans+2k1ik13i

多出来的那一部分如果除去最高位的贡献,
ans=ans+(R2k+1)3k

就可以去递归求解R2k了。
【注意】
据说本题中间过程爆longlong要开unsigned;然而我没有开也过了Orz。

第二题

【题目及题号】dp superoj1003
【题解】
本题其实是一道做过的题,但是我没有A掉,只拿了70分我感到非常地抱歉。Orz我对不起党和祖国还有人民,对不起我自己。
因为本题要求最大化最矮的高度,所以考虑二分。
那么如何验证这个高度是否合法呢?我们可以使用DP,对于第i位预处理出它前面k位(含)状态为j的高度。
转移的时候删掉一位插入一位状态,求一个满足高度的最小花费。

    f[i+1][(j>>1)|(1<<(k-1))] = min(f[i+1][(j>>1)|(1<<(k-1))],f[i][j]+c[i+1];    f[i+1][(j>>1)|(1<<(k-1))] = min(f[i+1][(j>>1)|(1<<(k-1))],f[i][j]);

【注意事项】
1.对于前驱状态j当前第i位的高度要预处理。

2.即使遇到做过的题也不要窃喜,因为你很有可能想掉最关键的东西。
比如今天,我忙着去想起了状态,忘掉了最重要的二分。

第三题

【题目及题号】change superoj1004
【题解】
本题一看就是傻逼题。建立一个映射,每次交换就可以交换映射,对于x,y输出a[ys[x]][ys[y]]即可。

【注意事项】

1.非常重要的一点:注意数据不合法,要跳空格!!!
2.对拍不仅要拍主程序,最好读入方式也区别一下。(有时间的情况下)

0 0
原创粉丝点击