摘要:
暴力的做法是$O(n^2)$,枚举左右端点$l$和$r$,通过前缀和计算出$sum[l \sim r] = sum[r] - sum[l-1]$,但不足以通过此题。 题意可转化为:找两个端点$l$和$r$,使得$sum[l \sim r]%k = (sum[r] - sum[l-1])%k == 0 阅读全文
摘要:
数组 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法: dataType[] arrayRefVar; // 首选的方法 或 dataType arrayRefVar[]; // 效果相同,但不是首选方法 注意: 建议使用 dataType[] arrayRefVar 的声明风 阅读全文
摘要:
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。 标识符注意点 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始。 首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线或数字的任何字符组合 不能使用关键字作为变量名或方法名。 标识符是 阅读全文
摘要:
直接暴力枚举所有状态,时间复杂度:\(O(2^{16} \times 4^3)\) const int N=5; bool g[N][N],tmp[N][N]; int n=4,m=4; bool check(int x,int y) { return x>=0 && x<n && y>=0 && 阅读全文
摘要:
和95. 费解的开关同题。 暴力总共有$2^$种翻转的方法。 先确定第一行的翻转方式,然后可以很容易判断这样是否存在解以及解的最小步数是多少,最上面一行的翻转方式共有$O(2M)$种,复杂度为$O(NM2M)$。 const int N=20; bool g[N][N],tmp[N][N]; int 阅读全文
摘要:
首先我们需要枚举$K$,对每个$K$我们都要从最左端开始来考虑$N$头牛的情况,此时最坏情况下需要进行$N-K+1$次反转操作,而每次操作又要反转$K$头牛,于是总的复杂度为$O(N^3)$。 对区间反转的部分考虑使用差分,每次只修改$i \sim i+k−1$,通过前缀和求解每一位是否反转。 反转 阅读全文