UOJ Rounds

UOJ Easy Round #1

  T1:均值不等式或极大极小值定理直接出解。注意:

精度问题

有人可能会写:

ans_min = (long long)sqrt((double)g * l);

这样会被卡精度,因为double大概只有15位10进制有效数字。只能得到60分。

解决方法是:

ans_min = (long long)sqrt(l / g) * g;

当然有人可能直接long double保平安了……

  T2:Trie树上放些指针就好了。

  T3:实际上就是一个可持久化并查集,然后整个状态空间形成了一棵树,用树上倍增即可。

    考虑更简便的做法。

    首先如果只有Add操作,MST的形态是不会变的。

    如果没有Return操作。Delete直接用可撤销并查集即可(不要路径压缩,因为代价是均摊而不是严格)。

扫描二维码关注公众号,回复: 991266 查看本文章

    有了Return之后的难点就在于前两种操作可以保证的均摊复杂度分析失效,我们就这一点处理:

      考虑一个Return操作,如果前面是Add,那这就是一个Delete 1。

      考虑一个Delete,可不可以做到,如果后面的操作不是Return,我们就“真删”,否则“假删”呢?

      思考如何“假删”,就是回答前k'条边形成的生成树的权值和,这个用维护一个数组即可。

UOJ Round #1

  T1:最小化sum{ a[i]%x+a[i]/x },变形成 sum{ a[i]-a[i]/x *(x-1) }。我们枚举x,问题就变成了对每个x求sum{ a[i]/x }。

猜你喜欢

转载自www.cnblogs.com/HocRiser/p/9076017.html