zoukankan      html  css  js  c++  java
  • CSP 模拟26

    A:字符交换

    可以发现最后的答案只与一种字符有关
    枚举最后所有点都聚到了哪个中间点
    枚举之后贪心的向中间去移动左右两边的点
    这样可以求出k次移动最多使当前位置出现多少个连续字符
    每次取max就是答案




    B:平方数

    正解可以做到(n^{frac{1}{3}})筛平方因子 %%lin4xu
    首先平方数一定各个质因子的次幂都是偶数次
    那么对于(p1^{k1}*p2^{k2}*...)(k1,k2为奇数)
    这个数和(p1*p2*...)是等效的
    所以直接把所有数都化成(p1*p2*...)的形式
    然后统计相同的个数就可以了
    但是直接把一个数的平方因子都筛掉是根号级别的
    所以考虑优化
    一个数一定可以表示为(x^2*y)的形式 其中y是个质因子
    考虑如何优化筛(x^2)
    发现对于一个数 (x,y)不可能同时大于1e3
    那么可以考虑只筛1e3以内的质数
    如果质数有奇数个就记录下来
    定为cur
    这样如果筛完之后 剩下的数如果是个平方数
    那么最后一定和cur是等效的
    如果筛完之后 剩下的数不是个平方数
    那么它一定也不含有平方项了
    因为如果含有平方项 一定是大于1e3的因子的平方
    而由于不是个平方数 所以一定也有一个大于1e3的质因子
    乘起来显然大于1e9
    所以最后一定就是剩下的数乘以cur
    然后就很好处理了 随便开桶 或者离散化 或者写哈希表都能过




    C:多维网络

    80pts 显然可以用傻逼容斥随便写
    考虑容斥复杂度瓶颈: 一条不合法路径被重复计算了多次
    那么考虑唯一表示一条不合法的路径 并且不重不漏
    可以用第一次经过的坏点是哪个来表示一条路径
    而且显然不会重和漏
    假定第一次经过的坏点是i的方案数是f[i]
    那么把终点也看成坏点 也可以一样求出终点的答案
    考虑怎么求第一次经过的坏点是i的方案数
    显然很好求
    用所有到i的方案数 减去第一次经过的坏点是j的方案数*j到i的方案数就可以了




    D:Lesson5!

    咕咕咕

    如初见 与初见
  • 相关阅读:
    OpenGL入门学习
    linux下安装sqlite3
    SQLite 之 C#版 System.Data.SQLite 使用
    .net程序运行流程
    一种简单,轻量,灵活的C#对象转Json对象的方案
    C# 获取Windows系统:Cpu使用率,内存使用率,Mac地址,磁盘使用率
    WPF中选择文件及文件夹
    要想创业成功,千万不能在这十个方面走弯路
    [译]Quartz.Net 框架 教程(中文版)2.2.x 之第三课 更多关于Jobs和JobDetails
    [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介
  • 原文地址:https://www.cnblogs.com/HISKrrr/p/13902320.html
Copyright © 2011-2022 走看看