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。