2017.07.10【NOIP提高组】模拟赛B组

T1:这题就是找出有多少对正整数x,y满足(1<=x,y<=n)且x/y为最简分数。

那么因为矩阵是对称的,所以我们把x<y的答案*2+1就是最终答案。

那么ans=sigma(欧拉(i))(1<=i<n)。注意n=1的特殊情况。


总结:检查要增加一步,除了数组大小和变量类型以外还要检查一下有没有特殊情况,而且特殊情况一般都是极端数据。


T2:这题以前做过,用堆,对时间离散化,各种做法都可以,只不过要注意以下特殊情况:

1、ans要用long long型。

2、快乐值小于0是要特判。

下面讲一下用堆怎样做。

我们建立一个快乐值的小根堆,然后把时间从小到大排序,把排好的数据顺着扫一遍。

若时间比堆中元素的个数小,那么把当前的窗户入堆。

如果时间比当前堆中元素的个数大或等于且快乐值比堆顶大,那么就用当前窗户替换掉堆顶窗户。

最终的答案就是堆中的快乐值的和。


T3:把控制关系连有向边,那么我们可以得到一个环套树和几个环。每一个环的答案就是环中点的个数的一半(向下取整),那么怎样处理环套树呢?

我们用贪心的思想,逐个删点。先把入度为0的点存入一个队列里,然后把队列里的点逐一删去,每删掉一个点,就把这个点指向的点标记为要被上帝拿去制造新世界的,并且把那个点也删掉。而那个点指向的点的入度也自然要减1,如果入度为0,那么把那个入度减1点入队。最终求出ans。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值