poj 1997 trie树

zoj 2112 Dynamic Rankings 带修改区间第k大的几种解法 给出n个数,有两种操作,一种是修改某个数的值,另一种查询指定区间第k大。 比较快的做法是树套树,而分块算法复杂度比较高写起来方便。分块算法可以很简单的处理单独修改某个值的情况。 将n个数分成num块,每块大小siz=n/num。每一块内部排序进行排序,查询[l,r]第k大时,先二分答案,对于完全包含在区间的内块直接二分搜索,而对于区间两端只有部分包含的则直接遍历查找。复杂度是logn*(2*s 阅读详情

Word Puzzle
Time Limit: 2000MS Memory Limit: 30000K
Total Submissions: 1113 Accepted: 494

Description

What a game collection it would be without famous and well known word puzzle. Also KOKODáKH contains this game. Typical word puzzle is a rectangular array filled with letters, and the list of words. The goal is to find the words form the list in the array and to score out all their letters. After scoring out the letter can still be part of any other word (words can cross and overlap). When all words from list are found and scored out there are several remaining letters. These letters, read in rows, create the secret word. The words can be found in all eight directions, including diagonal directions. 

It is clear that KOKODáKH has to bring some innovation into this game. The new rule says that the word can "jump over" the array boundary and continue on the opposite side. Upper row is thus next to the bottom row and the left collum is next to the right one. If we number the rows with numbers 0 till R-1 and collums with numbers 0 till S-1, we can describe each field in the array by the coordinates. For example (0,0) is the upper left corner. Word beginning on the position (x,y) can be created by succesion of characters with coordinates (x,y), ((x+i+R) mod R, (y+j+S) mod S), ((x+2i+R) mod R, (y+2j+S) mod S) and so on. The i and j can be substitued by numbers -1, 0 and +1, but they cannot be both zero at the same time. 

Input

The input consists of Z assignments. The number of them is given by the single positive integer Z appearing on the first line of input. The assignements follow. Each assignement consists of array filled with letters, and the list of words which should be found in the array. The description of the array begins with the line containing two integers R and S separated by space 1 <= R,S <= 200. R is the number of rows in the array, S is the number of collumns. The R lines follows, each line constist of exactly S lowercase letters (a trough z). The next line is the integer K (0 <= K <= 1000) determining the number of words to be found out in the puzzle. The K lines follow. On each line, there is one word. The maximum length of the word is 20 characters. The word may not appear in the array and it can appear there several times. In this case all appearences are scored out. Words in the list can repeat.

Output

The program prints one line for each assignement. On this line there will be all letters from word puzzle which remained in the array after scoring out all the words that appeared on the list. The letters are not separated and they are lined up in order in which they appeared in the array in row major order. At the end of the string, there is the newline character. If there are no remaining letters after scoring out all words, the program prints out empty line.

Sample Input

1
3 7
kroksun
pranyra
cmakrom
7
syr
kra
kroksunkrok
pranyr
rak
mak
makro

Sample Output

acm

Source

将k个字符串存到trie树里。对枚举每个字符作为起点,往8个方向都检查一次是否匹配trie树立的字符串,若匹配则消去


#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

#define rep(i,n) for(int i=0; i<n; i++)
int r,s;
char g[201][201];
int used[201][201];
int dx[3]={-1,0,1},dy[3]={-1,0,1};
const int tk=26, tb='a';
int top, tree[200000][tk+1];
void init()
{
    top=1;
    memset(tree[0], 0, sizeof(tree[0]));
}


void insert(char *s, int rank=1)
{
    int rt,nxt;
    for(rt=0; *s; rt=nxt, ++s){
        nxt=tree[rt][*s-tb];
        if(0==nxt){
            tree[rt][*s-tb]=nxt=top;
            memset(tree[top], 0, sizeof(tree[top]));
            top++;
        }
    }
    tree[rt][tk]=rank;
}

void prefix(int &x, int &y, int dx, int dy)
{
    int rt=0,lv,len=0;
    int nx=x,ny=y;
    int flag=1;
    for(lv=0; g[nx][ny]; nx=(nx+dx+r)%r,ny=(ny+dy+s)%s, ++lv){
        rt=tree[rt][g[nx][ny]-tb];
        if(tree[rt][tk]) len=lv+1;
        if(!rt) break;
    }

    for(int i = 0,nx=x,ny=y; i<len; i++,nx=(nx+dx+r)%r,ny=(ny+dy+s)%s)
        used[nx][ny]=1;
}



char str[25];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        init();
        memset(used, 0, sizeof(used));
        scanf("%d%d", &r, &s);
        rep(i,r)
        scanf("%s", g[i]);

        int k;
        scanf("%d",&k);
        while(k--){
            scanf("%s", str);
            insert(str,1);
        }
        rep(x,r) rep(y,s){
          if(!tree[0][g[x][y]-tb]) continue;
          rep(i,3) rep(j,3){
            if(!dx[i] && !dy[j]) continue;
            prefix(x, y, dx[i], dy[j]);
         }
        }

        rep(x,r)rep(y,s)
            if(!used[x][y])
                putchar(g[x][y]);
        putchar('\n');
    }
}





kmp求字符串最小周期 总时间限制: 3000ms 内存限制: 65536kB 描述 给定两个字符串a和b,我们定义a*b为他们的连接。例如,如果a=”abc” 而b=”def”, 则a*b=”abcdef”。 如果我们将连接考虑成乘法,一个非负整数的乘方将用一种通常的方式定义:a^0=””(空字符串),a^(n+1)=a*(a^n)。 输入每一个测试样例是一行可打印的字符作为输入,用s表示。s 阅读详情

相关推荐

PLUS模型土地利用变化模拟使用简介

因子包括自然因子如社会因子,通过计算整理得到新图层,并以tif文件输出到驱动因子的文件夹里,驱动因子文件夹里存放的是tif文件格式。线性回归使用提供的所有的LULC资源数据,可以选择往后预测的年数,选择好数据之后,可以得出预测的每一年的每一用地类型面积数据。在此过程之后,可以继续使用此CARS输入的数据继续模拟,也可返回二(3)中CARS模块,重新输入不同的年份预测。在此过程之后,可以继续使用此CARS输入的数据继续模拟,也可返回二(3)中CARS模块,重新输入不同的年份预测。

qq_42831270的博客 5806

poj1977(次小生成树)

这道题。。。 中间发生了许多曲折离奇的故事。。。 讲出来你可能不信。。 我写了一整天 主要思想为先找到最小生成树,,再拿不属于最小生成树的边替换,,最后可换出次小生成树 #include<cstdio> #include<cmath> #include<cstring> #include<queue> #include...

allia990718的博客 178

Python实战:ERA5风场数据区域提取与风向合成可视化全流程解析

本文详细解析了使用Python处理ERA5风场数据的完整流程,包括NC文件读取、特定区域数据提取、u/v分量合成风向风速的计算,以及利用Matplotlib进行风场时空演变可视化。内容涵盖从环境搭建、数据获取到高级绘图与性能优化的实战经验,为气象数据分析、风能评估及气候研究提供了一套清晰、可操作的技术指南。

swift5iosmith的博客 300

[转] ACM训练方案

OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ...

weixin_33755649的博客 511

SAP 零售 FMS 物料主数据(一)

SAP 零售 FMS 物料主数据(一) SAP 对于鞋服行业最新的解决方案-FMS(相当于原来的AFS+Retail);更偏向与零售; 商品主数据与原来的AFS大不相同,取消了原来的Grid的网格概念,取而代之的是变式;商品主数据维护也偏向于Retail的维护模式;事物代码也不是MM01而是MM41 /MM46; 在维护商品主数据前,需要与商品部沟通定义各种商品相关的规范如编码规则,大中小类 ,颜色库,尺码库等,此处不赘述; 创建商品需要确定哪些物料是变式物料,哪些是常规不带特性的单一物料;这决定了在创建商

weixin_45518759的博客 5061

深入解析DisplayPort(DP)接口:从主链路到辅助通道的全方位技术剖析

本文深入解析DisplayPort(DP)接口的核心技术架构,重点剖析了其三大功能模块:承载视频/音频数据洪流的Main-Link主链路、负责链路训练与设备控制的AUX CH辅助通道,以及实现智能交互的HPD热插拔检测。文章详细阐述了主链路的可伸缩Lane配置、嵌入式时钟与数据成帧机制,以及辅助通道在设备发现、动态优化信号质量(链路训练)中的关键作用,揭示了DP接口实现高效率与灵活性的设计哲学。

weixin_29267307的博客 485

棋盘问题(NOIP1997)(POJ-1321)

QAQ

frog77 491

PyQt5简介和安装

在initUI方法中,设置了窗口的标题和大小,并创建了一个按钮。PyQt5是一个功能强大的Python界面开发框架,可以轻松创建跨平台的图形用户界面应用程序。本文介绍了PyQt5的简介和安装方法,并提供了一个简单的示例应用程序来演示PyQt5的基本用法。PyQt5是一个功能强大的Python界面开发框架,它提供了丰富的工具和组件,用于创建跨平台的图形用户界面(GUI)应用程序。信号是控件发出的事件,槽是与之关联的处理函数。接下来,我们将编写一个简单的PyQt5应用程序,以演示PyQt5的基本用法。

XdKwargs的博客 222

快速幂-poj1995

Language: Default Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4103   Accepted: 2335 Description People are different. Some s

龙崎的专栏 1083

还在纠结二层交换机和三层交换机的区别?这篇文章帮你讲明白!

你好,这里是网络技术联盟站,我是瑞哥。公众号后台有小伙伴想要写一篇文章具体介绍一下二层交换机和三层交换机,此类的文章,之前写过几篇,今天瑞哥再写一篇,希望对大家有所帮助!

网络技术联盟站 4441

配置 SAP Fiori 服务的 ICF 节点:从 SICF 激活到访问链路打通的完整实践

在SAP Fiori项目实施中,ICF节点配置是关键前置条件却常被忽视。ICF(Internet Communication Framework)作为HTTP请求入口,需要通过SICF事务码激活相关服务节点,否则即使应用开发完善,用户仍可能遇到页面无法访问等问题。典型问题表现为:磁贴可点击但页面空白、资源加载失败等。激活路径主要涉及三组节点:bsp分支下的管理入口、ui5_ui5分支下的应用资源,以及public/bc下的公共资源。项目实施中需特别注意同名服务在不同分支下的差异化作用,确保完整链路通畅。IC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 264

noip1997 代数表达式 (模拟)

A1112. 代数表达式 时间限制:1.0s   内存限制:256.0MB   总提交次数:516   AC次数:87   平均分:57.98 将本题分享到:            查看未格式化的试题   提交   试题讨论 试题来源   NOIP1997 提高组 问题描述   如果有多种输出,则输出字典序最小的那

把复杂的事情简单描述 1008

【Android Performance】Android CPU调度模式详解:从performance到schedutil的Governor调优指南

本文系统讲解Android/Linux系统中的CPU频率调节策略(Governor),涵盖六大调度模式的底层工作原理:performance(性能优先)、powersave(省电优先)、conservative(保守调频)、ondemand(按需调频)、userspace(手动控制)以及schedutil(调度器驱动)。文中深入拆解每种Governor的调频决策逻辑、上升/下降曲线的差异、适用场景与选型建议,并配以实操命令演示如何查看可用Governor列表、动态切换调度模式以及多Cluster架构下的统一

weixin_44081096的博客 431

POJ --1204--Word Puzzle

题目大意:给出一个字符矩阵,在给出r个单词,找出这些单词在矩阵中出现的坐标和方向 由于数据规模的关系,直接搜索肯定是不行滴,。借助TRIE数据结构可以过掉,具体思路:枚举矩阵中的每一个位置和每一个方向,如果从该方向搜下去的字符出现trie树中的话就继续往下,如果trie树中没有的话,就break掉 代码:写的还是蛮清楚的嘛 #include #include #define maxnod

WoniuGe 540

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

信息学奥赛一本通 提高篇

第一部分 基础算法 第二部分 字符串算法 第1章 哈希和哈希表 1455 例题1 Oulipo(POJ3461):点击这里 第2章 KMP算法 第3章 Trie字典树 第4章 AC自动机 第三部分 图论 第四部分 数据结构 第五部分 动态规划 第六部分 数学基础 ......

mrcrack的博客 3940

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

B - Trie树(字符串问题)

/* http://acmore.net:8080/contest/view.action?cid=11#problem/B B - Trie树 Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit   Status Description You, as a memb

JHC23的专栏 907

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

主席树(可持久化线段树)入门专题

1.poj 2104 查询区间第k小。 主席树其实相当于建立了n棵线段树,第i棵线段树是根据区间【1,i】按值建立的。对于每一棵线段树我们记录它对应的区间每个数出现的次数,所以首先要对所有的数离散化。 先考虑最简单的情况,只查询【1,n】的第k小,对于【1,n】我们按值建立一棵线段树,对于a[i]我们在位置a[i]上加1。查询第k小那么先看左子区间出现了多少个数cnt,假设左区间出现的数cnt

写东西的地方 6180

单调队列的应用

描述 给定一个长度为n(n 下面是一个例子: 数组是 [1 3 -1 -3 5 3 6 7], k = 3。 窗口位置 最小值 最大值 [1  3  -1] -3  5  3  6  7  -1 3  1 [3  -1  -3] 5  3  6  7  -3 3  1  3 [-1  -3  5] 3  6  7

写东西的地方 2391

SPOJ COT2 树上的莫队算法,树上区间查询

题意:n个节点形成的一棵树。每个节点有一个值。m次查询,求出(u,v)路径上出现了多少个不同的数。 树上的莫队算法,同样将树分成siz=sqrt(n)块,然后离线操作。先对树dfs一遍,每当子树节点个数num>=siz,就将这num个分成一块。读取所有的查询按左端点所在块排序。 重点在于怎么进行区间转移,对路径的lca特殊处理,参考博客http://blog.youkuaiyun.com/kuribohg

写东西的地方 2277

poj 2887 块状数组/线段树

Big String Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 5952   Accepted: 1405 Description You are given a string and supposed to do some string manipul

写东西的地方 1570

hiho #1080 : 更为复杂的买卖房屋姿势 线段树区间更新

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产。 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政府有关部门针对房价的硬性调控。房价的变化自然影响到小Hi和小Ho的决策,所以他们希望能够知道任

写东西的地方 1464

hdu 4819 二维线段树,单点修改区间查询

Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Submission(s): 916    Accepted Submission(s): 402 Problem Description The God of sheep d

写东西的地方 1406

hdu 5381 莫队算法/gcd

The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 645    Accepted Submission(s): 279 Problem Description You have an array

写东西的地方 1085

hdu 3308 线段树-区间连续最长上升子序列

LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4842    Accepted Submission(s): 2166 Problem Description Given n integers. You ha

写东西的地方 1074

hiho #1079 离散化

#1079 : 离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学校举办社团文化节,各大社团都在宣传栏上贴起了海报,但是贴来贴去,有些海报就会被其他社团的海报所遮挡住。看到这个场景,小Hi便

写东西的地方 907

poj 1201 interval 差分约束/贪心+线段树区间更新

Intervals Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22337   Accepted: 8423 Description You are given n closed, integer intervals [ai, bi] and n integ

写东西的地方 901
上一篇: poj 3109 扫描线+bit
下一篇: hdu 3973 字符串hash+线段树动态维护
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值