zoukankan      html  css  js  c++  java
  • The 16th UESTC Programming Contest Warmup

    qsCQeszE

    题意:k种颜色的花,每一种都有无数朵,有n个妹子,问你有多少种方案,每个女生送一朵花,恰好K种颜色都送出去了

    很简单,直接容斥就好了F[i]表示送了小于等于i种,F[i] = C(k,i) * i ^ n.然后答案就是F[k] - F[k - 1] + F[k - 2] ...

    复杂度O(klogn)

    n <= 5e4,k <= 30

    Amaz1ng Prime

    题意:给你一棵树,问你有多少路径的长度是素数,每条边的权值是0/1

    直接点分治+FFT nlog^2n

    n <= 1e5

    Excited Pe0ple

    题意:有两组数,让你删掉最少的数,使得每个数和另一组的任意一个数都是互素的。

    n ,m <= 1e5,分别表示这两组数的个数

    a[i] <= 2e4 表示数的大小

    直接网络流,考虑到最暴力的建图就是把每个数都连向非互素的数,权值为inf,然后源点连第一组数,汇点连另一组,权值都是1.

    但是这样肯定会tle。

    然后发现权值比个数小,所以可以再一步优化,把每个数压起来,源点连第一组数,汇点连另一组,权值变成了那个数的个数。

    发现还是图还是很大

    但是实际上我们可以在中间加一层转接的点,这些点都是素数,然后建图变成了,每个数往自己的素因子连一条边,这样边的数量就变成了AlogA的级别

    GC?(X,Y)

    题意:定一个gc?(x,y)表示,这两个数的素因子分解后排序,gc?(x,y)就是他们的最长公共前缀的乘积

    比如gc?(12,20) = gc?(2 * 2 * 3,2 * 2 * 5) = 2 * 2 = 4.

    然后求任意两个数的gc?的和

    每个数的素因子的个数是log级别的,有两种方法做

    一个你可以先排序,对于一个数来说,它后面每个数和它的gc?是逐渐递减的,所以我们可以直接二分,因为最多只有log段,所以复杂度就是nlog^2n

    还有一种方法

    你可以把全部的前缀都hash起来.

    pre[i][j]表示第i个数,前缀j的哈希值

    然后对于一个数来说H[pre[i][j] ] - H[pre[i][j + 1]]就表示与a[i]这个数最长前缀长度为j的个数

    一个简单的容斥应用。然后就做完了

    Fact0rial

    题意:求n! % 1e11 + 3

    n <= 1e11 + 3

    看过去就是分段打表了,但是注意打表的时候要用快速乘,然后我是隔25000000打一个数,卡过去了

    其他题貌似挺简单的

  • 相关阅读:
    接口的故事
    Bash CookBook(一)--基础
    Spring学习笔记(四)--MVC概述
    Spring学习笔记(三)--Convert System设计
    java web框架发展的新趋势--跨界轻型App
    由Strurts2漏洞引开谈谈web代码安全问题
    Java线程同步之一--AQS
    Android Studio 0.4 + PhoneGap 3.3 开发环境的搭建
    redis的多线程
    原电商设计框架
  • 原文地址:https://www.cnblogs.com/scau-zk/p/8602411.html
Copyright © 2011-2022 走看看