随笔分类 -  九度OJ

随时记录在九度OJ上学到的东西
摘要:题目描述: 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。输入: 测试输入的第一行给出记录的总天数N ( N> 0 ),下面列出了N天的记录。 每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为 证件号码 签到时间 签离时间 其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。输出: 对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。 注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有 阅读全文
posted @ 2014-04-06 22:55 而远之 阅读(226) 评论(0) 推荐(0) 编辑
摘要:题目描述:给定一个由小写字母组成的字符串,求它的所有连续子串中,出现过至少两次,且至少有一对出现的重复子串是不重合的连续子串个数。如给定字符串aaaa,aa和a,符合条件,aaa不符合条件(出现重合),故答案为2。输入:输入包含多组测试用例,每组测试用例包含一个字符串,由小写字母组成,其长度不大于1000。输出:对于每组测试数据,输出一个整数,代表符合条件的子串个数。样例输入:aaaaaaa样例输出:21刚开始的时候,想到遍历每个字符子串,比如从位置1开始,依次遍历长度从1到n的子串,需要N^2。然后从位置2开始,依次遍历长度从1到n的子串,需要N^2。如果依次遍历完,总共O(N^3).字符串 阅读全文
posted @ 2014-03-23 01:33 而远之 阅读(821) 评论(0) 推荐(0) 编辑
摘要:题目描述:给定一个大小为n的数组,数组的元素a[i]代表第i天的股票价格。设计一个算法,计算在最多允许买卖k次(一买一卖记为一次)的条件下的最大收益。需要注意的是,你不能同时拥有两份股票。也就是说在下次买入前,你必须把手头上原有的股票先卖掉。输入:输入可能包含多个测试案例。对于每个测试案例,输入的第一行为两个整数n和k(1 const int MAX = 1001; int dp[MAX][MAX]; int main(){ int list[1010]; int n, k; while(scanf("%d %d", &n, &k) == 2) { for. 阅读全文
posted @ 2014-03-10 13:57 而远之 阅读(941) 评论(1) 推荐(0) 编辑
摘要:本文为经典动态规划问题,数组的最大序列和和的延伸。第一次看见这个题,用了端点枚举的方法,复杂度为0(n^2)。超时严重。参考九度Online Judge_1527: 首尾相连数组的最大子数组和这篇文章才明白O(n)的算法。题目描述:给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有 阅读全文
posted @ 2014-03-10 10:40 而远之 阅读(440) 评论(0) 推荐(0) 编辑