zoukankan      html  css  js  c++  java
  • Codeforces Round #383(div 2)

    A、快速幂

    B、 题意:求ai^aj=x的数对个数,x和a[]给定

      分析:a^b=c,则a^c=b,所以求ai^x=aj的个数,枚举一遍即可

    C、 题意:给你一个有向图,每个点的出边只有一条,求最小的n,使得从任意点走2n步都可以走回原点

      分析:先判断是否存在,如果存在,那么图中肯定是一个个的简单环,所以每个点的入度和出度都为1,否则不存在

         对于存在的情况,遍历每个环,得出它们的长度,求出它们长度的最小公倍数lcm

         若lcm是偶数,那么ans=lcm/2,如果lcm是奇数,那么ans=lcm

    D、 题意:n件物品,背包容量m的01背包,给出物品间的关系图,同一个连通块内的物品,要么选任意一个,要么不选,要么全选,求最大价值。

      分析:先介绍下分组背包,分组背包就是在01背包的基础上,规定一些组别,每一组里的物品要么不选,要么只能选一个

         for(int k=1;k<=p;++k)//枚举组别

          for(int j=m;j>=0;--j)//枚举包的容量

            for(int i=1;i<=n[k];++i)//枚举k组里的所有物品

              f[j]=max(f[j],f[j-w[i]]+v[i])

         这样改变枚举物品的顺序,巧妙的做到了每一组里面最多只选一个物品

         此题相较于分组背包而言,多了一个“要么全选”,这其实就是在该组中多加一个物品,该物品的重量和价值是该组物品的重量和价值总和

    E、 题意:n对情侣(2n个人)坐成一个圈,给每个人数字1或数字2,要求每对情侣间数字必须不同、任意三个连续的人不能相同数字,问是否存在方案,如果存在输出任意一种。

      分析:先考虑的是2-SAT问题,但是仔细一想发现这里涉及到三个人,所以是3-SAT问题,这是个NPC问题……

         然后考虑类似的能不能用差分约束表示,结果发现难点还是在于三个人等价于三个变量……差分约束的边没法建

         最后参考了题解,很巧妙

         假设方案存在,将2i和2i-1连边、每对情侣连边,那么易得这个图里如果存在环必然是偶环,不存在奇环,它是个二分图

         核对下题意,这样建图,任意三个连续的点,必然有一个点和另外两个点不在二分图的同一边,就满足颜色不能都相同!

         所以先染色判断是否二分图,如果是二分图,将二分图的左边令为1,右边令为2就行了

  • 相关阅读:
    30行js让你的rem弹性布局适配所有分辨率(含竖屏适配)(转载)
    JavaScript事件流原理解析
    Java中this和super的用法和区别
    Java多态面试题案例几解题思路
    Java多态的向上转型和向下转型
    Java方法的重载和重写
    Java冒泡具体的原理,以及下标的变化
    Java中的冒泡排序和选择排序
    使用Java实现对一个数组的增删改查以及初始化
    Java中构造函数传参数在基本数据类型和引用类型之间的区别
  • 原文地址:https://www.cnblogs.com/wmrv587/p/6188753.html
Copyright © 2011-2022 走看看