HIHOcoder编程总结

[Offer收割]编程练习赛44

对于第一题题目1 : 扫雷游戏,首先要想清楚思路,虽然是暴力算法,但是这八个方向要自己把坐标写正确,不要慌乱,自己写的时候就写错了一个,第二个就是判断的时候,j + 1>=0,这种是显然的事情,应该是j +1 < N,写草稿也要认真。

还有一个非常非常大的错误。

int N = 0;
cin >> N;
vector<string> input;
input.resize(N);
for (int i = 0; i < N; ++i) {
    string tmp;
    cin >> tmp;
    input.push_back(tmp);
}

前面resize直接导致input有N个空串,后面再压入就会导致有2N个字符串。

第三题:题目3 : 车队

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
在一条单车道的公路上有N辆汽车行驶,从前向后第i辆车的最高速度是Vi。

所有车辆都会尽量保持最高速度行驶。不过由于只有单车道,所以当后方快车追上前方慢车后,无法超车,只能降速跟在慢车后面。  

于是经过足够长时间(足够后方快车追上前方慢车)的行驶后,某些车辆会聚成一队以相同的速度向前行驶。我们把这些聚成一队的车辆称为一个"车队"。不同车队之间的距离会越来越大。  

例如假设有5辆车,速度依次是[3, 5, 4, 1, 2],则经过足够长时间行驶后,第1、2、3辆会聚成一个车队,第4、5辆会聚成另一个车队。  

现在假设你可以"拿掉"其中一些车辆,但不能改变剩余的车辆的前后次序和最高速度。请计算最少"拿掉"多少辆车,可以使得剩余的车辆数目恰好等于剩余车辆经过足够长时间行驶后形成的车队数量。(换句话说每辆车单独一个车队)  

在上例中"拿掉"第一辆和第四辆之后,[5, 4, 2]会最终形成3个车队,满足条件。  

输入
第一行包含一个整数N。  

第二行包含N个整数V1, V2, ... VN。  

对于30%的数据,1 ≤ N ≤ 1000  

对于100%的数据,1 ≤ N ≤ 100000, 1 ≤ Vi ≤ 100000, Vi保证两两不同。

输出
一个整数表示答案。

样例输入
5
3 5 4 1 2
样例输出
2

这题是一个最长上升子序列问题。开始自己马上不想就认为找到最长上升子序列和最长下降子序列就可以了,首先需要理解题目意思,应该是最后的答案是一个最长递降子序列,所以需要将vector进行反转,然后在进行求解最长递增子序列。

原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8283416.html

时间: 2025-01-08 15:56:50

HIHOcoder编程总结的相关文章

hihocoder编程练习赛73 A 地铁站

1 /* 2 Source :hihocoder编程练习73 3 Problem :一个长度为n的串,由若干段1-a[i](假设有Y段)的序列组成,现在中间缺了K个数,问能够还原出来的方案数,需要保证还原出来的子串的个数最少,即最小Y 4 Solution :1.通过分析剩余的序列,我们可以知道原来最少的时候Y是多少,即看原来的序列有多少单调递增的子段. 5 2.进行有解的判断,假设已知序列段中每段的最大值是b[i] i=1..Y,如果sum(b[i]) > N,则说明无解,这是序列的长度一定已

hihocoder 编程练习赛23

第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0).每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K.按从小到大的顺序输出所有合法的N位号码,每个号码占一行. 思路:dfs #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N = 20; #define LL long long int n, k, a[N]; void

【hihocoder编程练习赛9】闰秒

题目链接 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<math.h> 5 #include<iostream> 6 #include<stdlib.h> 7 #include<set> 8 #include<map> 9 #include<queue> 10 #include<vector&

hihoCoder编程练习赛70

题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 1,1 变成 0 现在小 Hi 想知道,至少需要多少次操作,才能将 n 变成 n-1 输入 一个正整数 n 1 ≤ n ≤ 109 输出 输出最少的操作次数 样例输入 10 样例输出 2 1 // 2018-07-29 2 #include <cstdio> 3 #include <cstr

hihoCoder编程练习赛69

题目1 : 偶数长度回文子串 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串 输入 输入包含多组数据. 每组数据包含一行一个小写字母字符串 S 1 ≤ |S| ≤ 105 输出 对于每组数据如果存在,输出YES,否则输出NO 样例输入 cabbad ababa 样例输出 YES NO 1 // 2018-07-29 2 #include <cstdio> 3 #include <cstring

hihoCoder编程练习赛72

题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有的玩具零件均在一块由N × M个单位块组成的设计板上切割获得.每个单位块有一个耐用指数aij. 由于玩具制作安全标准要求每个零件的面积至少大于等于S,小Ho想要知道设计板上能切割出满足标准的最大耐用指数的玩具零件为多少. 输入 输入共N+1行,第一行三个整数N,M,S表示设计板的大小以及安全标准中对

hihocoder - [Offer收割]编程练习赛17

hihocoder - [Offer收割]编程练习赛17 题目1 : F1 Score 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和他的小伙伴们一起写了很多代码.时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了. 于是他实现了一个分类算法,希望用机器学习实现自动分类. 为了评价这个分类算法的优劣,他选出了N份有标记的代码作测试集,并决定用F1 Score作为评价标准. 给出N份代码的实际作者是不是小Hi以及分类算法预测的结果,请你计算F1 Sco

hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)

题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x值是多少.这里还要再辅助一个val[k]表示处理到当前情况只错了k次的最小值是多少因为改变的不止是和弦还有初始值,可以看一下代码理解一下. #include <iostream> #include <cstring> #include <cstdio> #include &

hihoCoder [Offer收割]编程练习赛3 D子矩阵求和

子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常规的定义) 性质好题 看起来无从下手. 两个关键性质: 证明挺显然的.画画图 同余方程exgcd即可 子矩阵和? 先算出(0,0)的,每次平移,加减一行一列前n或m个, 细节: 1.纵向要循环到n,横向循环到m 2.注意开long long 3.反常规的设定真讨厌 #include<bits/std