您正在查看 "数据结构(线段树/矩阵/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 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()//表头, |
| | |