array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 topcoder srm 495 div1 - 爱码网

problem1 link

从前向后确定一下,然后再从后向前确定一下。一样的话就是可以确定的。

problem2 link

首先将强连通分量缩点。理论上来说,只需要遍历所有入度为0的联通块中的一个即可。

但是有一种情况可能是某个入度为0的联通块只包含一个节点$u$,这时当遍历完其他入度为0的联通块时即可确定节点$u$。

problem3 link

当$N$不能整除$H$时无解。

设连续的电梯长度为$L$。那么两个相邻的连续电梯块之间的长度也一定是$L$的倍数。

设$f(H,N)$表示$L>1$的答案,$g(H,N)$表示$L=1$的答案,那么题目的答案为$f(H,N)+g(H,N)$

其中$f(H,N)=\sum_{L|N,L>1}g(\frac{H}{L},\frac{N}{L})$

那么剩下的问题是如何计算$g(H,N)$。首先当$N=1$时,$g(H,N)=1$。

否则,设$N$节电梯当=的位置分别为$a_{0},a_{1},...,a_{N-1}$,其中$a_{0}=0$。电梯一共要停$\frac{H}{N}$次。设第$i$次停的时候最下面一节电梯所停的楼层为$b_{i}$。显然$b_{0}=0$

第一次停的楼层为 $a_{0}+b_{0},a_{1}+b_{0},...,a_{N-1}+b_{0}$

第二次停的楼层为 $a_{0}+b_{1},a_{1}+b_{1},...,a_{N-1}+b_{1}$

那么很显然$a_{0}+b_{1}=1$,因为$a_{1}+b_{0}=a_{1}\ne 1$

所以$b_{1}=1$

对于某一层楼$x$,一定存在唯一的二元组$(i,j)$满足$x=a_{i}+b_{j}$

交换数组$a,b$,可以看作现在是$\frac{H}{N}$节电梯,停$N$次。因此

$g(H,N)=\left\{\begin{matrix}1 & N=1\\  f(H,\frac{H}{N}) & N > 1\end{matrix}\right.$

 

code for problem1

public class ColorfulCards {
	
	public int[] theCards(int N, String colors) {
		boolean[] p = new boolean[N + 1];
		for (int i = 1; i <= N; ++ i) {
			p[i] = isprime(i);
		}
		final int x = colors.length();
		int[] f = new int[x];
		for (int id = 1, i = 0; i < x; ++ i) {
			while (id <= N && !match(colors.charAt(i), p[id])) {
				++ id;
			}
			if (id > N) {
				f[i] = -1;
			}
			else {
				f[i] = id ++;
			}
		}
		for (int id = N, i = x - 1; i >= 0; -- i) {
			while (id > 1 && !match(colors.charAt(i), p[id])) {
				-- id;
			}
			if (id < 1) {
				f[i] = -1;
			}
			else {
				if (f[i] != id) {
					f[i] = -1;
				}
				-- id;
			}
		}
		return f;
	}

	static boolean match(char c, boolean b) {
		return c == 'R' && b || c == 'B' && !b;
	}

	static boolean isprime(int x) {
		if (x == 1) {
			return false;
		}
		for (int i = 2; i * i <= x; ++ i) {
			if (x % i == 0) {
				return false;
			}
		}
		return true;
	}
}

  

code for problem2

import java.util.*;
import java.math.*;
import static java.lang.Math.*;

public class CarrotBoxes {
	
	public double theProbability(String[] information) {
		final int n = information.length;
		boolean[][] g = new boolean[n][n];
		for (int i = 0; i < n; ++ i) {
			for (int j = 0; j < n; ++ j) {
				g[i][j] = (information[i].charAt(j) == 'Y');
			}
		}
		for (int i = 0; i < n; ++ i) {
			for (int j = 0; j < n; ++ j) {
				for (int k = 0; k < n; ++ k) {
					if (g[j][i] && g[i][k]) {
						g[j][k] = true;
					}
				}
			}
		}
		List<Integer> top = new ArrayList<>();
		boolean[] tag = new boolean[n];
		for (int i = 0; i < n; ++ i) {
			if (tag[i]) {
				continue;
			}
			int ind = 0;
			for (int j = 0; j < n; ++ j) {
				if (g[j][i] && g[i][j]) {
					tag[j] = true;
					continue;
				}
				if (g[j][i]) {
					++ ind;
					break;
				}
			}
			if (0 == ind) {
				top.add(i);
			}
		}
		final long all = (1l << n) - 1;
		for (int i = 0; i < top.size(); ++ i) {
			final int last = top.get(i);
			long st = 0;
			for (int j = 0; j < top.size(); ++ j) {
				if (j == i) {
					continue;
				}
				final int t = top.get(j);
				for (int k = 0; k < n; ++ k) {
					if (k != last && g[t][k]) {
						 st |= 1l << k;
					}
				}
			}
			if (st == (all ^ (1l << last))) {
				return 1.0 * (n - (top.size() - 1)) / n;
			}
		}
		return 1.0 * (n - top.size()) / n;
	}
}

  

code for problem3

import java.util.*;
import java.math.*;
import static java.lang.Math.*;

public class StrangeElevator {
	final static long B = 1000000001;
	final static int mod = 1000000007;

	Map<Long, Integer> Gmap = new HashMap<>();
	Map<Long, Integer> Fmap = new HashMap<>();

	public int theCount(int H, int N) {
		if (H % N != 0) {
			return 0;
		}
		return (F(H, N) + G(H, N)) % mod;
	}
	int G(int H, int N) {
		if (N == 1) {
			return 1;
		}
		if (Gmap.containsKey(H * B + N)) {
			return Gmap.get(H * B + N);
		}
		int result = F(H, H / N);
		Gmap.put(H * B + N, result);
		return result;
	}

	int F(int H, int N) {
		if (Fmap.containsKey(H * B + N)) {
			return Fmap.get(H * B + N);
		}
		int result = 0;
		for (int i = 1; i * i <= N; ++ i) {
			if (N % i == 0) {
				if (i > 1) {
					result += G(H / i, N / i);
					result %= mod;
				}
				if (i *i != N) {
					result += G(H / (N / i), i);
					result %= mod;
				}
			}
		}
		Fmap.put(H * B + N, result);
		return result;
	}
}

  

相关文章: