自己YY出来的方法,时间复杂度为n*m,但实际上并没有这么多,codeVS上最慢的一组有300多ms。
对于每一个订单,在它的左端点加上需要的教室数量,在右端点加1的位置减去需要的教室数量。然后统计前缀和,如果有某个点的前缀和大于了当天教室的数量,那么就有的订单就有问题了,然后从订单编号从小到大统计在订单区间的教室数量,保存恰好不能满足的那个订单;对于之后不满足题意的前缀和,统计订单的最大编号不...
分类:
其他好文 时间:
2015-08-18 21:30:25
阅读次数:
194
对1~n组成的序列进行冒泡排序,一共进行了k趟,问有几个符合题意的序列。
注意:这里指每一趟是指交换当前相邻的所有逆序对,例如:2 1 4 3进行一趟交换就是1 2 3 4
如果我们细心观察,就会发现,需要进行的趟数等于序列中对于某个最多逆序对数的数。例如:在序列 3 2 1 4中,3的逆序对为0,2的逆序对为1,1的逆序对为2...
分类:
其他好文 时间:
2015-08-17 23:47:43
阅读次数:
172
模拟考试的时候由于前面的题耗时太严重,所以没有写
对于第一行的每个城市,我们可以预处理出在这座城市建立蓄水厂,水流能到达最下面一行的哪些城市;如果最终的题目是有解的,那么最后一行这些被覆盖的城市是连续的,反证:如果水流到达最下面一行的城市是断开不连续的,则说明中间有城市海拔比四周都高,其他城市过来的水流也流不上去,因此永远无法被覆盖,与我们之前的条件相矛盾。
预处理出来每做城市的覆盖范围后,这...
分类:
其他好文 时间:
2015-08-16 23:17:24
阅读次数:
122
考试的时候老是在想第一维是走到点i时候的最大值,然后没有考虑到这样可以计算出每种牌用了多少张。。。。。
dp[i][j][k][l]表示第一种牌用i张,第二种牌用j张,第三种牌用k张,第四种牌用l张的最大值
#include
#include
#define MAXN 355
using namespace std;
int c[5],a[MAXN],f[41][41][41][41];
in...
分类:
其他好文 时间:
2015-08-16 21:32:02
阅读次数:
104
给出n个数,n
卡内存的神题,用数组存下来刚好1mb,再加上运行时消耗内存,马上爆。因此我们用优先队列存储一半的数。网上的某些代码,用priority_queue全爆内存。我存的125000长度的数组,加上STL的make_heap()
#include
#include
using namespace std;
int a[125010];
int main()
{
in...
分类:
其他好文 时间:
2015-08-16 15:16:36
阅读次数:
126
通道题意:一棵树,每个节点有一个点值(字符),问u子树的深度为k的所有节点组成的字符串是否为回文思路:搜出dfs序及该节点的深度,那么u节点深度为K的那一段肯定在dfs序[l,r]区间内,然后对于回文的处理,要么这段异或和为0,要么lowbit(x)=x代码:#include using names...
分类:
其他好文 时间:
2015-08-14 15:04:05
阅读次数:
109
给出一个n*n的棋盘和m个象,每个象能够覆盖它所在的对角线,问没有被覆盖的点有多少个
n*n的暴力方法很好想出来,但是肯定超时。但是我们可以把主对角线和从对角线保存下来,预处理好没有被覆盖的点,dp[i]表示第i条从对角线上面没有被覆盖的点,一共有2*n-1条从对角线。对于从对角线的上半部分,dp[i]初始化为dp[i-2]因为他们的奇偶性相同,则除去第i条从对角线的两个端点以外,如果第i-2条...
分类:
其他好文 时间:
2015-08-13 22:17:15
阅读次数:
145
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5379
题面:
Mahjong tree
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1148 Accepted...
分类:
其他好文 时间:
2015-08-13 12:18:34
阅读次数:
108
题意:数轴上从0出发可向左右走,第i步的距离为i,求到达x的最小步数(x#include#includeusing namespace std;int n,m,sum;int main(){ int i,j,k; while(scanf("%d",&n)!=EOF){ if...
分类:
其他好文 时间:
2015-08-11 11:39:21
阅读次数:
167
题目:输入两个递增排序的链表,合并这两个链表,并使新链表中的结点仍然是按照递增排序的。
第一种思维:合并两个排序的链表,类似于合并两个排序数组,所不同的仅是一个用链表保存数据,一个用数组保存数据。
算法如下:(下面的算法前提是:头结点 不是 链表的第一个数据节点。)
/**方法一:合并两个排序链表,使用了新创建的链表来保存,没有改动两个原始链表*/
ListNode *merge_tow...
分类:
编程语言 时间:
2015-08-11 01:31:00
阅读次数:
176