[itint5]跳马问题加强版】的更多相关文章

http://www.itint5.com/oj/#12 首先由跳马问题一,就是普通的日字型跳法,那么在无限棋盘上,任何点都是可达的.证法是先推出可以由(0,0)到(0,1),那么由对称型等可知任何点都可以到了. 加强版是可以跳到(p,q),当然对称的也可以跳到(q,p).那么接下来是数学推导:http://www.itint5.com/discuss/16/%E8%B7%B3%E9%A9%AC%E9%97%AE%E9%A2%98%E5%8A%A0%E5%BC%BA%E7%89%88 1. 计算…
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1288  Solved: 490[Submit][Status][Discuss] Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密.接下来M行,代表图中的每条边.接下来K行,每行两个整数L…
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围内的非负整数,请设计一个高效算法,计算第n项F(n).第一个斐波拉契数为F() = . 给定一个非负整数,请返回斐波拉契数列的第n项,为了防止溢出,请将结果Mod . 斐波拉契数列的计算是一个非常经典的问题,对于小规模的n,很容易用递归的方式来获取,对于稍微大一点的n,为了避免递归调用的开销,可以用…
背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已知多项式方程: $$a_0+a_1x+a_2x^2+...+a_nx^n=0$$ 求这个方程在[1, m]内的整数解(n 和 m 均为正整数). 输入格式 输入共 n+2 行. 第一行包含 2 个整数 n.m,每两个整数之间用一个空格隔开. 接下来的 n+1 行每行包含一个整数,依次为$a_0,a_…
大概有$O(m)$,$O(n\sqrt{nm})$,$O(n\sqrt{m})$的3个算法,其中后2个可以过加强版.代码是算法3,注意bzoj的数据卡掉了小于20000的质数. #include<algorithm> #include<cstdio> using std::sort; typedef long long ll; const int p1=20123; const int p2=20201; const int p3=2e8-9; char z[10002]; typ…
最近么,单位里面么老不顺心的,公司一直催要程序员要PHP,然后本宅好不容易推荐了一个,我日嘞,最后待遇变成1.3,吾师最后也同意1.3W,然后还说要考虑... 尼玛,4年多5年不到一点的工作经验,前端,后端PHP都会,标准全栈工程师!在支付宝混过1年..我的领路人兼前端PHP启蒙老师...杀人的心都有了,搞得我也想离职了 然后么,我也被搞得没有动力,没有动力...最后搞了下面那个....参考了草明的播放器(就是LOW) https://github.com/YanMr/H5Player Low的…
转至:http://www.cnblogs.com/ceachy/archive/2013/01/31/PowerShell_vs_Cmd.html PowerShell是命令行的加强版吗?PowerShell能执行命令行的所有命令吗?PowerShell要替代命令行?这三个问题的答案足以让我们了解PowerShell与Cmd命令行之间的关系.让我们慢慢道来... PowerShell中的命令 启动PowerShell,在其中输入几个常用的Cmd命令 PS D:\Projects\Practis…
4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 241  Solved: 119[Submit][Status][Discuss] Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. Output 如题 Sample Input 1 23 3 Sample Outpu…
3545: [ONTAK2010]Peaks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1202  Solved: 321[Submit][Status][Discuss] Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如…
这个加强版,只做了新增和查看. 主要是在新增代码那里增加了一些处理: 进入新增操作,一直可以不跳出来,每次新增成功后,问你是否继续,输入y就继续,输入n就不继续 代码如下: import java.util.Scanner; /* * 简版DVD管理器,把新增的弄一个循环, */ public class InsertStr { public static void main(String[] args) { Scanner input=new Scanner(System.in); Strin…
/*加强版for循环 * 5.0以后有加强版for循环 * for(String name:nameArray){} * 1.String name:声明会带有数组单一元素的循环变量 *   数组元素的类型必须与循环变量的类型匹配 * 2.:冒号代表“in”通过它访问数组 * 3.nameArray:要被逐个运行访问的集合 * 4.重复执行的代码放在{}*/ public class Jiaqiang { public static void main(String[] args){ Strin…
http://www.itint5.com/oj/#50 此题有点难,参考了这篇文章,是个两条路的DP: http://blog.csdn.net/a83610312/article/details/12522077一句话:这个跟从起点直接引两条路径出去是一样的,一条到达 i 点,一条到达 j 点 .然后用DP做. 首先要认识到,从起点引出两条路,上面到i点,下面到j点,和上面到j点,下面到i点,是对称的.如图所示(红色代表从左向右走,蓝色代表从右向左走,蓝色和红色可能有交叉,这里为了简单,未画…
题解: 裸LCT+离线+二分+MST... 代码:(几乎摘抄自hzwer) #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<map> #include<set> #include&l…
http://www.itint5.com/oj/#49 这一题一开始想到是用HashSet+链表来做,链表记录prev和next.这样也可以,后来看到都是连续的整数,而且交流了一下觉得可以用类似并查集的方式来做,一个数组,每个位置记录该位置的直接后继,删除元素时更改后继. vector<int> vec; void init(int N) { vec.resize(N); for (int i = 0; i < N; i++) { vec[i] = i; } } void remove…
http://www.itint5.com/oj/#47 一种做法是:把矩形所占的方格都设为-1,就是个最大子矩阵和问题.复杂度o(w^2*h)或o(w*h^2),空间W*H猜想应用场景是:电脑屏幕上已经有了n个聊天框,新建一个聊天框,放在屏幕的哪个位置最好.客户端计算的话,空间复杂度太高的算法应该是没法实际应用的.这种方法OJ也会空间超出. 另一种做法(贪心思想,和一个矩形覆盖最小):所求矩形的上边要么贴着边界,要么贴着某个已有矩形的下边所求矩形的下边要么贴着边界,要么贴着某个已有矩形的上边所…
http://www.itint5.com/oj/#39 最大子矩阵和,复杂度O(n^3).利用了最大子段和的方法. int maxRectSum(vector<vector<int> > &matrix) { int n = matrix.size(); if (n == 0) return 0; int m = matrix[0].size(); if (m == 0) return 0; int max = 0; for (int i = 0; i < m; i…
http://www.itint5.com/oj/#28 这题有意思.一开始还想不清楚,看了解释,很棒. 这个题目的特殊之处是所有节点的值都是不一样的. 所以递归过程可以大大简化. 先看两种遍历的性质: pre-order: root, left *************, right ######### post-order: **************left, ########right, root 所以 pre-order 的第一个元素一定等于 post-order 的最后一个元素.…
http://www.itint5.com/oj/#27 用了基于stack的中序遍历,记录一下last,就很简单了. #include <stack> /*树结点的定义(请不要在代码中定义该结构) struct TreeNode { TreeNode *left, *right; bool isLeftThread, isRightThread; }*/ void convertToThreadedTree(TreeNode *root) { stack<TreeNode*> s…
http://www.itint5.com/oj/#25 这题在leetcode上是用中序遍历来做的,但是这里由于有相等的情况,即左子树小于等于根,这样中序遍历无法完全判定.可以用递归来做,用递归给出每个子树的上下界. #include <climits> bool isBSTRecur(TreeNode *root, int leftVal, int rightVal) { if (root == NULL) return true; return (root->val <= r…
http://www.itint5.com/oj/#23 这里就是26进制的转换,但是要注意没有0,A就是1,Z就是26.所以要想象成从0开始,才能用原来的方法计算. //将十进制数转换为excel数 string decToExcel(int decNum) { string ans; while (decNum != 0) { char c = (char) ((decNum - 1) % 26 + 'A'); decNum = (decNum - 1) / 26; ans += c; }…
http://www.itint5.com/oj/#22 这题一开始直接用暴力的DFS来做,果然到25的规模就挂了. vector<bool> visited(50, false); vector<vector<int> > vec_row(50); vector<vector<int> > vec_col(50); bool findPath(vector<int> &x, vector<int> &y,…
http://www.itint5.com/oj/#18 这一题,首先如果直接去算的话,很容易就超出int或者long的表示范围了.那么要利用%的性质,(num * 10 + 1) % a = 10 * (num % a) + 1 % a.除了a为1的情况,都是10 * (num % a) + 1.然后计算的时候,先去掉是2和5的倍数的情况.也可以直接做,如果余数出现过,就不用继续了. int findMinAllOne(int a) { if (a % 2 == 0 || a % 5 == 0…
http://www.itint5.com/oj/#15 用hash来做,目前为止做到最好也是case16超时(20w的规模),即使分桶也超时.注意计算hashcode时,'a'要算成1,否则如果'a'为0,那么"aa"和"a"是一样的.下面是超时的代码: #define BUCKET 65535 #define ulong long long vector<unordered_set<ulong> > uset(BUCKET); vecto…
http://www.itint5.com/oj/#42 基本上就是word ladder.直接来BFS,记录前驱. vector<string> transform(set<string> &dict, string from, string to) { vector<string> ans; if (from.length() != to.length()) { return ans; } queue<string> que; map<st…
http://www.itint5.com/oj/#17 DP.注意曾经把赋值写成了==,结果出错半天. bool isInterleaving(string &str1, string &str2, string &str3) { int n = str1.length(); int m = str2.length(); int k = str3.length(); if (n + m != k) return false; vector<vector<bool>…
http://www.itint5.com/oj/#36 此题在数据大些,而且全是A的情况下会超时(因为要匹配到很后面才false).通过利用数组本身作为visited标示,而且使用string引用,得意通过. bool find(vector<vector<char> > &grid, string &pattern, int i, int j, int k) { if (k == pattern.length()) return true; int m = gr…
http://www.itint5.com/oj/#13 要注意,一是空路径也可以,所以最小是0.然后要时刻注意路径顶多有两条子路径+根节点组成,所以更新全局最值时和返回上一级的值要注意分清. #include <climits> using namespace std; int maxPathHelper(TreeNode *root, int &max) { if (root == NULL) { return 0; } int root_val = root->val; /…
http://www.itint5.com/oj/#20 其实是3sum的变种,有重复数字,但是一开始还是写错了.其实是选定一个后,在右边剩余数组里找2sum,找到一组后继续找. #include <algorithm> using namespace std; typedef tuple<int, int, int> ABC; //存放a,b,c三元组 //返回所有满足条件的(a,b,c)三元组 vector<ABC> threeSumZero(vector<i…
http://www.itint5.com/oj/#6 首先,试验的时候要拿5个来试,3,4个都太少了.好久没做所以方法也忘了,是先从后往前找到第一个不合顺序的,然后在后面找到比这个大的最小的来交换,再把后面排序. #include <algorithm> #include <vector> #include <climits> using namespace std; bool next_permutation(vector<int> &arr)…
http://www.itint5.com/oj/#10 拓扑排序.首先按照题目给出的数据结构复杂度不会是O(v+e)的,所以先要变换数据结构.二来写的时候用一个stack会更好点.还有就是题目里其实ID就是1到n. #include <map> #include <vector> #include <stack> #include <iostream> using namespace std; typedef int JobID; /* * deps[id…