摘要: 题目大意:原题链接(定长区间求最值) 给定长为n的数组,求出每k个数之间的最小/大值。 解法一:线段树 segtree节点存储区间的最小/大值 Query_min(int p,int l,int r,int ll,int rr)从编号为p的节点开始在区间[l,r]内查询区间[ll,rr]的最小值 Q 阅读全文
posted @ 2017-02-20 23:57 despair_ghost 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 题目大意:原题链接 题意很简单,就不赘诉了。 解题思路: 使用二维树状数组,很裸的题。 二维的写起来也很方便,两重循环。 Add(int x,int y,int val)表示(x,y)-(n,n)矩形区域被修改val次(在传入参数时val=1) 如果是要修改(x1,y1)-(x2,y2)的矩形区域。 阅读全文
posted @ 2017-02-20 23:51 despair_ghost 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 题目大意:原题链接 给你一个字符串,首先是计算出一个按正常编码的编码长度,其次是计算出一个用霍夫曼编码的编码长度,最后求正常编码的长度除以霍夫曼编码长度的比值,保留一位小数。 解题思路:需要知道 1.正常的编码长度的话,由于都是ASCII码值所以编码长度都为8,所以总长度就是8*字符串的长度Len就 阅读全文
posted @ 2017-02-20 21:08 despair_ghost 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 题目大意:原题链接 锯木板,锯木板的长度就是花费。比如你要锯成长度为8 5 8的木板,最简单的方式是把21的木板割成13,8,花费21,再把13割成5,8,花费13,共计34,当然也可以先割成16,5的木板,花费21,再把16割两个8,花费16,总计37,现在就是问你花费最少的情况。 思路:转化为哈 阅读全文
posted @ 2017-02-20 19:31 despair_ghost 阅读(132) 评论(0) 推荐(0) 编辑
摘要: #include #include const int maxn=1e6+5; using namespace std; int r[maxn],c[maxn]; char pic[maxn]; void Swap(int &x,int &y) { int temp=x; x=y; y=temp; } int main() { int n,m,op,x,y,T... 阅读全文
posted @ 2017-02-20 18:24 despair_ghost 阅读(233) 评论(0) 推荐(0) 编辑
摘要: #include using namespace std; int n,A[505][505]; int B[505][505],C[505][505]; int Read() { int d=0; char ch,t=0; while((ch=getchar())==' '||ch=='\n') ; if(ch=='-') t=1; else d=ch... 阅读全文
posted @ 2017-02-20 18:21 despair_ghost 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 题目大意:原题链接 给定三个n*n的矩阵A,B,C,验证A*B=C是否成立. 所有解法中因为只测试一组数据,因此没有使用memset清零 Hint中给的傻乎乎的TLE版本: AC版本解法一:神奇的输入优化 之前就看到过几次一个神奇的输入模板,不知道这段代码是否就是那个(提交多次,觉得估计在提交人数多 阅读全文
posted @ 2017-02-20 18:18 despair_ghost 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题目大意:原题链接 给定n个节点,任意两个节点之间有权值,把这n个节点分成A,B两个集合,使得A集合中的每一节点与B集合中的每一节点两两结合(即有|A|*|B|种结合方式)权值之和最大。 标记:A集合:true B集合:false 解法一:dfs+剪枝 解法二:随机化算法(好神奇的思路) 阅读全文
posted @ 2017-02-20 10:59 despair_ghost 阅读(188) 评论(0) 推荐(0) 编辑