摘要: 思路一:环形数组拆分成普通数组(通过搬运复制数据到尾部),再求前缀和,找出最大前缀和。因为枚举了每一个起点 所以最大连续和也一定出现在前缀和中! 思路二:1、如果子序列的最大和在 1 到 n 的范围内,直接输出最大和即可 2、如果子序列的最大和横跨了尾部和头部,则先求出连续的最小子序列和然后用总和减 阅读全文
posted @ 2019-02-01 16:03 fishers 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 样例输入: 3 4 5 1 0 0 0 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 5 6 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 10 10 1 1 1 1 1 1 1 1 1 1 1 0 0 0 阅读全文
posted @ 2019-02-01 15:58 fishers 阅读(526) 评论(0) 推荐(0) 编辑
摘要: 样例输入: 6 1 9 7 3 5 5 样例输出: 4 思路:贪心,选错贪心思路,只能过一小部分数据,正确贪心思路:从前一半遍历,在后一半中找到比当前元素的两倍大的数(因为这里指针不会后移,所以可以采用双指针) 代码: include using namespace std; int arr[500 阅读全文
posted @ 2019-02-01 15:12 fishers 阅读(797) 评论(0) 推荐(0) 编辑
摘要: 样例输入: 3 ba a aba 样例输出: 2 3 1 思路一:暴力,只能过50%数据,枚举每一个字符串,内层枚举其他字符串判断是否以这个字符串为后缀 思路二:哈希表,存储每一个后缀的数目,string.substr函数取后缀 substr用法: 代码一: include using namesp 阅读全文
posted @ 2019-02-01 13:50 fishers 阅读(891) 评论(0) 推荐(0) 编辑
摘要: include using namespace std; const int N = 1e5 + 9; int f[N], a[N]; int n; //二分查找: 在f数组中查找到第一个比x大的数的下标 int find(int l, int r, int x) { while (l 阅读全文
posted @ 2019-02-01 11:39 fishers 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 思路:从l枚举到r肯定超时,这时我们要转变思路!题目让我们求一个区间内的d的倍数,只需要求出r/d l/d就是区间内d倍数的个数。 代码: include using namespace std; long long r = 12302135942453; int l = 1032; int d = 阅读全文
posted @ 2019-02-01 11:23 fishers 阅读(486) 评论(0) 推荐(0) 编辑