思路: 矩阵快速幂. 实现: #include <iostream> #include <cstdio> #include <vector> using namespace std; typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; ; ll n, x, y; mat mul(mat & a, mat & b) { mat c(a.size…
[题目链接]:http://hihocoder.com/problemset/problem/1504 [题意] [题解] 可以把二维的坐标转成成一维的; 即(x,y)->(x-1)*8+y 然后就写矩阵乘法吧. 每个点每次能够到达的点是固定的; 把每个点能够到达的点写成一个矩阵的形式; 作为系数矩阵; 求它的n次方 然后初始矩阵a[(r,c)][(r,c)]=1 用它去左乘系数矩阵; 就能得到到每个点的方案数了; 肯定都是不同的方案 直接累计答案就好; 最后注意是枚举到64而不是8了!! [N…
http://hihocoder.com/contest/offers13/problems 题目1 : 风格不统一如何写程序 首先:输入保证组成变量名的单词只包含小写字母. 做法:只要对不同的部分进行修改即可 注意:只有一个单词,两个方法的单词都一样 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> int main() { long n,i,k,…
#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…
[题目链接]:http://hihocoder.com/problemset/problem/1503 [题意] [题解] 一直在纠结如果没胡的话要扔掉哪一个麻将; 但其实可不用扔的,全部存起来就好了嘛! 最后只要能胡,就把剩余的牌扔掉就好了(上帝视角); 判断一下4个3和1个对子以及7个对子的情况; 其中前者你要枚举是哪两种花色合在一起(相同也可以啦) 然后先组成4个3个的;最后判断能不能有一个对子; 模拟一下就好; [Number Of WA] 1 [完整代码] #include <bits…
[题目链接]:http://hihocoder.com/problemset/problem/1502 [题意] [题解] 枚举矩形的最上面的行数和最下面的行数(i,j且i<=j); 然后一个变量k枚举最右边的列数; 一个变量l维护在右边的列为k的情况下做坐标的列的列数; 一开始l=1; 然后维护这个矩形里面的数字和小于等于k就好; 因为只涉及到一个列里面的元素的增删,所以只要在竖列上预处理出前某一列前i行的前缀和就好: O(n^3)的复杂度 [Number Of WA] 0 [完整代码] #i…
[题目链接]:http://hihocoder.com/contest/offers13/problem/2 [题意] [题解] 算出1..250*250这些数字每个数字的所有因子(成对的那种,即x*y=number),这些成对的因子作为我们要枚举的矩形的长度; 当然加个限制,x<=250,y<=250; 这样1..2502里面总共也只有250个左右的因子; 可以了! 然后枚举每个格子作为矩形的右下角; 用得到的250个左右的成对因子作为矩形的长宽; (因为要求格子的数目最多,所以在处理出因子…
[题目链接]:http://hihocoder.com/problemset/problem/1501 [题意] [题解] 模拟题 [Number Of WA] 1 [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define rep1(i,a,b) for (int i…
描述 最近天气炎热,小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 分析…
链接 [https://hihocoder.com/contest/offers97/problems] 题意 题目1 : 放置矩形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi计划在笛卡尔平面中依次放置N个2x1的矩形(矩形的长是2,宽是1,长宽分别与XY轴平行).其中第i个矩形的左下角预计放置在坐标(Xi, Yi)的位置上. 如果放置某一个矩形时,发现会与之前放置的矩形相交(公共面积大于0),就放弃放置当前矩形,继续尝试下一个矩形. 给定N个矩形的放置…
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和B应该都能AC的,但是A题由于脑子二笔了一下,最后终测T掉了.不过很奇怪,最后分数也没有跌,反而涨了,终于要接近紫名了,下一发不跌的话,应该有紫了.然后说一下这场Hihocoder吧,据说有offer面试名额,然后选了网易游戏和微软,虽然很是想去微软的,但是又二笔了几发,这就这样了.. A题:九宫(…
描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如果A队1月1日参加了一场比赛,那么下一场比赛最早安排在1月3日. 给定M场比赛的时间和参赛的两支队伍,请你判断这个日程安排是否可行. 输入 第一行包含一个整数T,代表测试数据组数.(1 ≤ T ≤ 10) 对于每组数据,第一行包含两个整数N和M.(1 ≤ N ≤ 50, 1 ≤ M ≤ 1000)…
题目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…
智力竞赛 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,…
满减优惠 描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望选择若干道不同的菜品,使得总价在不低于X元的同时尽量低. 你能算出这一餐小Ho最少消费多少元吗? 输入 第一行包含两个整数N和X,(1 <= N <= 20, 1 <= X <= 100) 第二行包含N个整数A1, A2, ..., AN.(1 <= Ai <=…
看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半边的点中有哪些连续数字,连续的数字就是一个[l, r]组合 就可以算出u这半边有哪些潜在的[l, r]组合 当然u这半边算好了,v这半边正好是u的数字反过来 这个过程可以使用set来统计,很好写 现在我们解决了对于一个边怎么算贡献 现在需要使用点分治 使用点分治求重心进行遍历保证了每个点至多被放入s…
题目1 : 命名 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 有两个公司想要合并,第一个公司的名字是一个字符串S,第二个公司的名字是一个字符串T. 合并后的新公司是这样取名的: 1.先选一个S的子序列A,T的一个子序列B,要求-1 ≤ |A|-|B| ≤ 1 2.如果|A|=|B|,那么可以选择取名为A1B1A2B2..A|A|B|B|或者B1A1B2A2..B|B|A|A|,例如A=abc, B=def,则可以取名为adbecf或者daebfc. 3.如果|A|…
A HihoCoder 1268 九宫 思路: 一般类似于数独的题目都是使用回溯解决,这里由于题目数据较小同样可以直接DFS得出结果.这里我用了一个偷懒的方法(next_permutation),直接求出全排列,然后将位置一一对应. // Asimple #include <bits/stdc++.h> #define debug(a) cout<<#a<<" = "<<a<<endl #define sysp system(…
题目1 : 闰秒 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差.为了弥补这种偏差,我们偶尔需要增加一个“闰秒”. 最近的一次闰秒增加发生在UTC时间2016年的最后一天.我们在2016年12月31日23时59分59秒和2017年1月1日0时0分0秒之间增加了这样一秒:2016年12月31日23时59分60秒,记作2016-12-31 23:59:60. 目前一共…
A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把第i行列和第j行列去掉,再求剩下的a[i]+a[j]数就是解 用容斥,要把(i,i)(i,j)(j,i)(j,j)加回来,想o(n3),结果tle 结果发现求结果时只求a[i]+a[j]个数就行了,只需改变跟a[i]+a[j]有关的计数就可以了. 还要有一个计数器,储存每个数字分别有多少个 然后直接…
第一次做这种比赛,被自己坑的好惨... A.这道题的关键其实是如果有k和n满足kD+F>nL>kD则不能走无限远,分支看似难整理,其实比较简单,F>L根本就不用算了,明摆着就是Bsi强迫症的 L和D有倍数约数关系的也比较简单 剩下的就可以规约为kD%L>L-F,如果有k能让此式成立,那强迫症就被Bsi. 注意到kD%L的排布有倍数规律,一定是gcd(D,L-D)的倍数 然后求模数是否能到达L-F就是了 #include<cmath> #include<cstdio…
原题链接 矩形分割 算法分析: 解决该题要用到"并查集"的思想. 这里有一篇不错的博客介绍并查集: 并查集(Union-Find)算法介绍 记 int total=N*M,这里会有 total 个方块,因为一道对角线(''或者'/')会把一块方块分割为左右两部分,所以,我们把任意一块方块看做左右两个部分.对于左部分,从左到右从上到下依次编号为 0~total-1:对于右部分,从做到右从上到下依次编号为 total~2*total-1;用一个 int parent[20000] (因为1…
题目意思很简单, 一道类似于背包的问题,问恰好超过背包容量的最小取值.并且需要计算n次,每计算一次都要将所有的物品的价值w[i] /= t,最后输出背包n次的总使用容量. 如果无法实现输出”No Answer”. 就是背包的变形,或者用队友的话说,当做dp做就好了,管它是不是背包呢. 主要就是状态转移方程了,其它没什么难点. ……感觉自己好水. #include <iostream> #include <cstdio> #include <cmath> #include…
一道中文题,就不用翻译了. 大意是讲,一串数字,可以按照输入的先后顺序扔到一个固定大小的缓冲池子里,这个池子里的数输出顺序随意.然后计算—— SP=1*Pi1+2*Pi2+3*Pi3+...+N*PiN(其中i1, i2, ... iN是1, 2, 3, ... N的一个排列) 问在满足sp <= q的情况下,缓冲池最小可以是多少? 很水的一道题,然而还是花了我好久. 首先得出一个结论,将缓冲池里的数字按照从大到小的的顺序输出,可以得到当前缓冲池大小的最优解.那么就找一个可以在将数字扔到池子里的…
#1515 : 分数调查 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得到一些小道消息,例如X号同学的分数比Y号同学的分数高S分. 小Hi想知道利用这些消息,能不能判断出某两位同学之间的分数高低? 输入 第一行包含三个整数N, M和Q.N表示学生总数,M表示小Hi知道消息的总数,Q表示小Hi想询问的数量. 以下M行每行三个整数,X, Y和S.表…