摘要: 直接求超时。用线段树。简单做法直接用2N数组,以1为root,2*i为左节点,2*i+1为右节点。 求区间[a,b]和时,如果a为右节点,则减去左节点的值。如果b为左节点,则减去右节点的值。a,b迭代为自己的父母。当a,b相等时,加上当前节点的值,即为区间和。 我也是第一次接触线段树的概念。刚开始也想自己建立一棵树。在网上找到了张昆玮的线段树的讲稿,才发现可以直接用数组。分享下:http://wenku.baidu.com/view/f27db60ee87101f69e319544.html#include <iostream>using namespace std;int s[1 阅读全文
posted @ 2013-02-27 19:17 SF-_- 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 初看以为很简单的。。。当然,直接数组保存单词然后遍历查询一定会超时。在网上搜索了一下,看到“字典树”的概念。自己也没看他的代码,但是却找到了方法了。 字母一共有26个。建立一个结构,里面保存一个大小为26的指针数组,然后读入单词,节点+1。额,看代码更清楚些#include <iostream>#include <string>using namespace std;class word{public: word() { memset(s,0,sizeof(s)); num=0; } word *s[26]; int num;};... 阅读全文
posted @ 2013-02-27 13:07 SF-_- 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 无奈的Wrong了N次,请教师兄后才搞定这题。。。注意消空格,用STL里的set做的,代码如下:#include <iostream>#include <set>#include <string>using namespace std;int main(){ set<string> st; char str[1000]; char s[100]; int len,slen; while (cin.getline(str,sizeof(str)) && str[0]!='#') { st.clear(); len=0 阅读全文
posted @ 2013-02-27 00:23 SF-_- 阅读(835) 评论(0) 推荐(0) 编辑