2014年2月10日
摘要: 原题链接简单的打表法,直接上ac代码。#include #include #define MAX 1000000 + 2int a[MAX], b[MAX];void CountPrime(){ int i, j, t = sqrt(MAX); a[0] = a[1] = 1; //'1'代表不是素数 for(i = 2; i != t; ++i){ if(a[i]) continue; for(j = i * i; j < MAX; j += i) a[j] = 1; }}void CountM(){ for(int i = 3; i != MAX; ++i){ if( 阅读全文
posted @ 2014-02-10 22:53 长木Qiu 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 原题链接思路:将每个节目以结束时间为准排序,再用结束时间和后面的开始时间比较,若小,则count+1;附ac代码#include #include struct Node{ int begin, end;};int cmp(const void *a, const void *b){ return (*(Node *)a).end - (*(Node *)b).end;}int main(){ int t, n; scanf("%d", &t); while(t-- && scanf("%d", &n)){ Node *a 阅读全文
posted @ 2014-02-10 22:20 长木Qiu 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 原题链接思路:用节点表示长方形的编号,长宽和tag(用来去重的标记,默认为1,重复的标记为0)难点:先按编号快排,再去重.附ac代码#include #include struct Node{ int num, len, wid, tag;};bool compare(Node a, Node b){ if(a.len == b.len && a.wid == b.wid) return true; return false;}int cmp(const void *a, const void *b){ if((*(Node *)a).num - (*(Node *)b).nu 阅读全文
posted @ 2014-02-10 21:20 长木Qiu 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 思路: 将原数组递归分解为两个子数组,直到能求解出子解为止,再将答案合并。难点:产生数组的最大子序列只有以下三种情况:1.最大子序列为左子数组的最大子序列;2.最大子序列为右子数组的最大子序列;3.最大子序列为跨中点的最大子序列;(特殊情况)依照以上三种情况分而治之即得解。附ac代码#include int a[100001]; void subcross(int arr[], int *low, int *mid, int *high, int *sum){ int s = 0, maxl = -1000 - 1, maxr = -1000 - 1, l, r; for(int ... 阅读全文
posted @ 2014-02-10 17:12 长木Qiu 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 原题链接思路: 将原数组递归分解为两个子数组,直到能求解出子解为止,再将答案合并。难点:产生数组的最大子序列只有以下三种情况:1.最大子序列为左子数组的最大子序列;2.最大子序列为右子数组的最大子序列;3.最大子序列为跨中点的最大子序列;(特殊情况)依照以上三种情况分而治之即得解。 附上ac代码: 1 #include 2 int a[100001]; 3 4 void subcross(int arr[], int *low, int *mid, int *high, int *sum){ 5 int s = 0, maxl = -1000 - 1, maxr = -1000 -... 阅读全文
posted @ 2014-02-10 14:34 长木Qiu 阅读(259) 评论(1) 推荐(0) 编辑