文章列表
 
您正在查看 "数据结构(线段树/矩阵/trie等)" 分类下的文章

2010/07/25 18:53

【题目大意】

给定一个1~n的排列,每次操作会将[l,r]这个区间上的数翻转。问到最后,整个排列变成个什么样?

【算法分析】

就是Splay加个翻转操作啦。。。非常easy。用来增加自信心。。。。

属于被秒杀题类型。。。

【时间复杂度】O(m lg n)

【空间复杂度】O(n)

【其它】1Y。

【CODE】

#include <cstdio> 
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
const int N=135555
 
2010/06/30 23:19
【题目地址】

http://61.187.179.132:8080/JudgeOnline/showproblem?problem_id=1503

【题目大意】
维护一个数据结构
支持以下操作
插入:插入单个元素
删除:删除某些子树
查询:查询第k大的元素
....
于是很容易想到利用平衡树来维护,今天刚学的SBT基本操作,于是尝试了一下,结果这道经典题目直接WA成了傻子,到最后秃然发现我数组只开了一半……………………

【解题思路
 
2010/02/24 10:56
围观地址

【题目大意:】
给出n个串(n<=100),每个串的长度 Len[i] <= 100
求出一个最长的子串,使得该子串或者该字串的反文是原先所有n个串的子串

【样例:】
2
rose
orchid

字串是"ro" (或"or")
可以知道它是最长的,于是答案为2

【解法1:】
【Brute Force】
由于规模不大,可以考虑直接暴力搜索,从长度最小的字符串开始暴力搜索既可.
 
2010/02/23 18:42
围观地址

【题目大意】
给定一个字符串(长<=40w)
求出所有相同的前缀和后缀,并把它们的长度按照顺序输出

【解法】
一开始看到此题立马想到了后缀数组


给定的A[] 就是题目所给的字符串
下面如果有
LCP(rank[0],rank[i]) == len - i 那么必然得到了一个解
 
2009/11/26 16:08
传送门:

不多说,一个字:仰慕小HH
#include
#include
#include
#include
 
2009/09/15 18:07
cpg的题题,即传说中的****过程,自然由于精度要求不高,完全可以暴力暴力解决.今天秃然想用解线性方程组的方法做一下,结果却开始了一个下午的悲剧.



原因在最后会给出.

dp[i]表示cpg在有i个apple的情况下win的概率
然后假设题目给的是p
令q=1.0 - p;

dp[i]=p*dp[i-C] + q*dp[i+D]//因为这些概率可以认为是常数!这点很重要

注意
if(x<0) d
 
2009/08/13 10:30
二分时间求解


题目地址

题目的意思是给你一群衣服,每个衣服都有一个ai表示它所含有的水的值,而每一个单位时间它们的含水的值减1(直到0,dry..)
题目还额外给了一个烘干机,每单位时间可以减少k个单位的水.


二分时间,判断可行性,然后求解即可.

注意判断可行性的过程:

1.先把所有衣服的含水量减去T
2.对于剩余水量>=(k-1)的,拿去烘干,
 
2009/07/09 11:28
题目地址

栈的应用,水水更健康,just 代码一贴
#include<iostream>
#include<vector>
using namespace std;
char
op
 
2009/07/06 6:36
struct Tries
{
    int next[26];
    int cnt;
    char data;
    void init(char c){data=c;cnt=0;memset(next,0,sizeof(next));}
}T[100001];
int top;
int fid;
char str[11];
void insthash(int dep,int idx)//将str[]插入字典树中...
{
    if(!str[dep])
    {
        ++T[idx
 
2009/05/06 20:35
#include<iostream>
#include<cmath>
using namespace std;
#define LSIZE 50001
#define LBUF 50001
int N,Q;
bool readint(int &ret)
{
    char c;
    while(((c=getchar())<'0'||c>'9')&&c!=EOF);
    if(c==EOF)return false;
    ret=c-'0';
    while((c=getchar())>='0'&&c<='9')ret=ret*10+(c-'0');
    return r
 
2009/04/24 14:11
矩形面积并的O(nlogn)算法
#include<iostream>
#include<algorithm>
using namespace std;
struct SegTree
{
   int l,r,cnt;
}S[65536];
struct Seg
{
   bool in;
   int x,u,d;
   bool operator<(const Seg&X)const{return x<X.x;}
}L[65536];
int len,llen;
int Y[1001],ylen;
int hashtable[20001];
void mkseg(int x,int l,int r)
{
   S[x].l=l;
 
2009/04/17 15:22
线段树的题目做过不少了
不过还是有必要贴一下这题
首先这题使我以前求矩形并的算法完全没用武之地,据说这类问题有O(NlogN)的算法,哪为大牛指教一下

这题离散完以后构造线段树,应该还是算很基础的一道题,唯一的trick可能就是溢出了吧

#include<iostream>
#include<algorithm>
using namespace std;
struct Seg{int l,r;long long data;}s[262144];
struct Llist{int val;bool operator<(const Llist&x)const{return val<x.val;}}L[8
 
2009/04/09 13:14
本代码纯属于练习,直接提交会TLE...
只是为了学习一下二维的操作方法
未用到DLX算法
只是模拟了删除行列的过程...汗一下
等用DLX过了以后再发个吧~
PS.学完这个以后基本NC了..脑细胞死了无数...@.@
不过做出来还是很有感觉的:)

#include <iostream>
using namespace std;
struct DancingLinks
{
    int left;
    int right;
    int up;
 
 
2009/04/05 0:05
代码写的非常搓
 
2009/04/04 22:13
多么美妙的数据结构,虽然看的时候花了很多时间和精力,不过效果确实是十分的美妙!


#include <iostream>
using namespace std;
struct DancingLinks
{
    int left;
    int right;
    int up;
    int down;
    int data;
    int h,l;
    DancingLinks(){left=right=up=down=-1;}
}DL[14*14+14];
int n,m;
void mkheadcon()//表头,
 
   
 
 
文章分类
 
   
 
文章存档
 
     
 
最新文章评论
  

猜到你把m出成20的用意了 。。。我只随机了30次,而没有随机到有解为止,难道就是这
 

orzorz
 

YM啊
 

福大核武 景润后人 Orz!!!
 

福大核武 景润后人 Orz!!!
   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu