[考试]20150728
1、总结
今天考试才是真正的NOIP难度好不好。。。虽然第三题感觉很变态,但是比昨天正常多了。那么今天是选拔赛的第一场,成绩中规中矩,存在考虑不周全,骗分不彻底的情况。
2、题解
<1> resistance ( TAG:辗转相除(100) )
分析:首先根据电阻串联和并联的性质(不要考虑高中知识),可以得到电阻的转移方式,由此前30分BFS即可;分析后面70分的数据范围为10^18,很容易得到肯定不能递推,O(n)都是极为不现实的,其实我们人工计算一下5个电阻所得到的电阻值即会发现第i个电阻放入之后和第i+1个电阻放入之后得到的总电阻之间是可以通过辗转相除转换的,找到规律之后这道题就很好做了。而同时,因为数据比较水,用更相减损的也过了,虽然两者很明显在最坏情况下的时间复杂度不是一个级别的。
代码:
------------------------------------------------------------------------------------------------------
#include<cstdio>
#include<cstdlib>
typedef long long ll;
ll p,q,ans;
void work(ll p,ll q)
{
if (!q) { printf("%I64d",ans); exit(0); }
ans+=p/q; p=p%q; work(q,p);
}
int main()
{
freopen("resistance.in","r",stdin);
freopen("resistance.out","w",stdout);
scanf("%I64d %I64d",&p,&q);
if (p>q) work(p,q); else work(q,p);
return 0;
}
------------------------------------------------------------------------------------------------------
<2> clique ( TAG:优先队列(70) / DFS+状态压缩DP(100) / 暴力搜索(100) )
分析:题面很明确,数据也相对不大,方法有很多种。首先暴力的话,存在40分做法,对每个节点进行枚举是否选取然后判断。还可以利用优先队列+子集树维护是否选取(不详细介绍,比较麻烦),可得70分;还有比较暴力的做法,ZZD(@z123z123d)就是这么做的——根据每个节点的度数从大到小排序,然后依次进行判断,根据搜索次数进行卡时,也过了。
代码略。
<3> walk ( TAG:费马定理,物理相关,求导)
虽然这道题对于我们这些一没了解过相对论二没求过导的人来说基本不可做,但是大致分析一下,还是有40分可以骗到的。但是注意题目中一个很重要的细节:x可为负数,就这样我挂了10分。
代码略。