时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在玩一款类似俄罗斯方块的游戏.与原版俄罗斯方块不同的是,落下方块都是长度不一的横向长条,并且不能移动也不能变成竖直方向. XXXXXX <- 长度为6的横向长条. 第i个长条的最左端的格子坐标是Li,最右端的格子坐标是Ri:长条从很高的位置下落,中途遇到地面或者受到之前长条支撑,就会停在当前高度. 你能计算出每个长条最后停留的高度是多少吗? 直接停在地面上的长条高度视为1. 例如5个长条依次下落的位置是[10,…
不到一个小时AK,虽然是VP的,舒服,第一次.都简单的一比,没什么可说的. 查找三阶幻方 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iostream>…
给定一个NxM的01矩阵,小Hi希望从中找到一个01间隔的子方阵,并且方阵的边长越大越好. 例如对于 0100100 1000101 0101010 1010101 0101010 在右下角有一个4x4的01间隔方阵. Input 第一行包含两个整数N和M. 以下N行M列包含一个NxM的01矩阵. 对于30%的数据,1 ≤ N, M ≤ 250 对于100%的数据,1 ≤ N, M ≤ 1000 Output 输出最大的01间隔方阵的边长. Sample Input 5 7 0100100 10…
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定正整数x和k,判断是否存在正整数1 ≤ y ≤ x使得x与y同奇偶且(x!!)/(y!!)的个位数字为k. 其中x!! = x × (x-2) × …. 如果存在这样的y,你需要输出最大的一个,如果不存在这样的y,你需要输出-1. 输入 第一行一个正整数T,表示组数. 接下来T行,每行两个正整数x和k. 对于30%的数据1 ≤ T ≤ 3, 1 ≤ x ≤ 30, 0 ≤ k ≤ 9 对于70%的数据1 ≤ T ≤…
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个N x M的矩阵,请你数一数其中有多少个3 x 3的子矩阵可以构成三阶幻方? 如果3 x 3的矩阵中每一行.每一列和两条对角线上的3个数之和都相等,我们就认为其构成一个三阶幻方. 输入 第一行包含两个整数N和M.(1 ≤ N, M ≤ 100) 以下N行M列包含一个N x M的矩阵A.(1 ≤ Aij ≤ 100) 输出 输出矩阵中包含多少个三阶幻方. 样例输入 5 5 4 9 2 1 8 3 5 7 6 2…
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望选择若干道不同的菜品,使得总价在不低于X元的同时尽量低. 你能算出这一餐小Ho最少消费多少元吗? 输入 第一行包含两个整数N和X,(1 <= N <= 20, 1 <= X <= 100) 第二行包含N个整数A1, A2, ..., AN.(1 <= Ai <= 100)…
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素,从小到大放在队列中,再把b按顺序放入另一个队列中,每次取出两队列中较小值即可. #include<bits/stdc++.h> using namespace std; typedef long long ll; ]; queue<int>q1, q2; vector<int&g…
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析…
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和B应该都能AC的,但是A题由于脑子二笔了一下,最后终测T掉了.不过很奇怪,最后分数也没有跌,反而涨了,终于要接近紫名了,下一发不跌的话,应该有紫了.然后说一下这场Hihocoder吧,据说有offer面试名额,然后选了网易游戏和微软,虽然很是想去微软的,但是又二笔了几发,这就这样了.. A题:九宫(…
描述 如下图所示,在4x4的棋盘上有X和Y两种棋子各若干枚:O表示空格. OXXY YOOX XOOY XOXX 小Hi每次可以选择任意一枚棋子,将它移动到上下左右相邻的空格中. 小Hi想知道最少移动多少次可以达到胜利局面:有4个X或者4个Y连成一行.一列或者对角线(两条对角线都算胜利). 输入 4x4的棋盘 输出 达成胜利最少需要的步数.如果小Hi无论如何也达不到胜利局面,输出-1. 样例输入 OXXY YOOX XOOY XOXX 样例输出 2  思路: 数据小,达到目标的最小步骤问题,多半…
思路: 模拟,dfs. 注意题目中的trick,输出一块的时候不要把其他块也输出了. 实现: #include <cstring> #include <iostream> #include <cstdio> #include <algorithm> using namespace std; ][]; int n, m, minx, miny, maxx, maxy; ][], ok[][]; ] = { , , , - }; ] = { , , -, };…
题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的中点坐标. 输入 第一行包含一个整数N. (2 <= N <= 100) 以下N行每行包含两个整数Xi, Yi代表Pi的坐标.(0 <= Xi, Yi <= 10000) 输出 输出折线段的中点坐标.坐标保留一位小数. 样例输入 3 0 0 30 30 40 20 样例输出 20.0…
A HihoCoder 1268 九宫 思路: 一般类似于数独的题目都是使用回溯解决,这里由于题目数据较小同样可以直接DFS得出结果.这里我用了一个偷懒的方法(next_permutation),直接求出全排列,然后将位置一一对应. // Asimple #include <bits/stdc++.h> #define debug(a) cout<<#a<<" = "<<a<<endl #define sysp system(…
原题链接 矩形分割 算法分析: 解决该题要用到"并查集"的思想. 这里有一篇不错的博客介绍并查集: 并查集(Union-Find)算法介绍 记 int total=N*M,这里会有 total 个方块,因为一道对角线(''或者'/')会把一块方块分割为左右两部分,所以,我们把任意一块方块看做左右两个部分.对于左部分,从左到右从上到下依次编号为 0~total-1:对于右部分,从做到右从上到下依次编号为 total~2*total-1;用一个 int parent[20000] (因为1…
#1502 : 最大子矩阵 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该子矩阵中所有元素的和不超过K. 输入 第一行包含三个整数N.M和K. 以下N行每行包含M个整数,表示A. 对于40%的数据,1 <= N, M <= 10 对于100%的数据,1 <= N, M <= 250 1 <= K <= 2147483647 1 <= Aij…
题目1 : 九宫 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi近期在教邻居家的小朋友小学奥数.而近期正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不反复的填入一个3*3的矩阵其中,使得每一行.每一列和每一条对角线的和都是同样的. 三阶幻方又被称作九宫格,在小学奥数里有一句很有名的口诀:"二四为肩,六八为足.左三右七.戴九履一.五居当中".通过这种一句口诀就行很完美的构造出一个九宫格来. 有意思的是,全部的三阶幻方,都可以通过这样一个九宫…
描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如果A队1月1日参加了一场比赛,那么下一场比赛最早安排在1月3日. 给定M场比赛的时间和参赛的两支队伍,请你判断这个日程安排是否可行. 输入 第一行包含一个整数T,代表测试数据组数.(1 ≤ T ≤ 10) 对于每组数据,第一行包含两个整数N和M.(1 ≤ N ≤ 50, 1 ≤ M ≤ 1000)…
描述 小Hi和小Ho在玩一个战争游戏.游戏中2N个战斗单位,其中第i个单位的战斗力是Ai. 现在小Hi和小Ho要各选N个单位组成队伍,当然他们都希望自己队伍的总战斗力越大越好. 为了使分队更加公平,经过亲切友好的磋商,小Hi和小Ho达成共识按照以下步骤确定分队: 1. 小Ho将2N个单位分成两队,每队N个战斗单位:然后自己选择其中一队,把另一队给小Hi. 2. 小Hi有权利要求交换一对战斗单位:如果他行使这项权利,他可以任选自己队中的一个战斗单位,与小Ho队中任意一个战斗单位交换. 假设小Hi和…
题目3 : 末尾有最多0的乘积 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定N个正整数A1, A2, ... AN. 小Hi希望你能从中选出M个整数,使得它们的乘积末尾有最多的0. 输入 第一行包含两个个整数N和M. 第二行包含N个整数A1, A2, ... AN. 对于30%的数据,1 ≤ M ≤ N ≤ 12 对于100%的数据,1 ≤ M ≤ N ≤ 100  1 ≤ Ai ≤ 1000000000 输出 末尾最多的0的个数 样例输入 4 2 8 25…
最大的K-偏差排列 每次取可选范围里的最大的数字,如果最左侧的数字还没有使用就直接使用最左侧的数字 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iostre…
[题目链接]:http://hihocoder.com/problemset/problem/1495 [题意] [题解] 把每个方块都再分成3*3的小块; 这样; 对于一个方块来说 如果是'\' 则把 (3*x,3*y)和(3*x+1,3*y+1)以及(3*x+2,3*y+2)都占据了 表示这些点是线. 如果是'/' 则把 (3*x+2,3*y)和(3*x+1,3*y+1)以及(3*x,3*y+2)都占据了 也表示这些点是线; 那些不是线的方块就置为空白区域; 这样就能够用一个个方块来表示空白…
[题目链接]:http://hihocoder.com/problemset/problem/1487 [题意] 中文题 [题解] 岛屿的数目对应了这个图中联通块的数目; 面积则对应有多少个方块; 周长...周长就是周长 每次新增加一个方块的时候; 对于联通块; 把每个坐标转换成一维的数字; 然后写个并查集; 对于周长; 查看这个格子周围4个格子; 如果有格子和它相邻; 则那一面不会算在周长里面; 则减掉; 如果没有格子相邻则加上一个单位的周长 [Number Of WA] 0 [完整代码] #…
AEIOU 选出的子串中由AEI构成的子串和由OU构成的子串之间并没有什么关系,分别算出最长的加起来. #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iost…
扫雷游戏 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iostream> #include<map> #include<queue&…
公平分队 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iostream> #include<map> #include<queue&…
矩阵游戏II 把每列的数字加起来当一行处理.因为每次操作两列,所以最后最多剩下一个负数.如果负数的个数是偶数,直接所有数字的绝对值加起来即可:若负数个数为奇数,把所有数的绝对值加起来减去其中最小的绝对值的两倍即可. #include<stdio.h> #include<string.h> #include<stdlib.h> ][]; int main() { #ifndef ONLINE_JUDGE freopen("input.txt", &qu…
智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mean: 略(中文题). analyse: 比赛中最先想到的是三维dp,但思考后发现可以压缩为二维,状态转移方程: dp[i][j]=min(dp[i][j],dp[i][j-(right+fault)]+right) 其中dp[i][j]表示: 到通过第i关为止,在总共只有j次答题机会的情况下,总共至…
#1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星舰会以T(T为大于0的整数)个单位时间的间隔向小Ho的城市轰击.歼星舰总共有N枚炮弹,其中第i枚会造成Ai点伤害值. 幸好小Ho的城市有K层护盾,每层护盾可以抵挡M点伤害.当某次轰击使得伤害值达或超过M时,该层护盾就会被击碎:该次轰击溢出的伤害不会作用于下一层护盾:下一次轰击将由下一层护盾承受. 同…
#1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称.第一次去一教小卖部买零食的时候,小Ho由于不懂事买了好一大堆东西,被小卖部姐姐给了一个“冷若冰霜”的眼神,食欲都下降了很多. 从那以后,小Ho就学乖了,去小卖部买东西只敢同时买3包以内的零食,并且价格加起来必须是5的整数倍,方便小卖部姐姐算价格. 但是小Ho不擅长计算,所以他把小卖部里所有零…
#1283 : hiho密码 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的:对于一种有N个字母的语言,选择一个长度为M的单词:将组成这个单词的所有字母按照顺序不重复的写出(即遇到相同字母时跳过):然后将字母表剩下的没有使用过的字母按照顺序在其后进行排列. 如对于有5个字母的hiho语,选择单词1, 2, 2, 4, 3(此处数字表示字母在字母表中的顺序),则秘钥为1,2,…