HDU 4339 Query

算法:

比赛时没有想到好的算法,暴力是O( Q * N )肯定超时。

赛后,线段树,树状数组,HASH都能AC,想了下,的确用树状数组

时间复杂度就可以优化到O(Q * lgN * lgN)

2000msAC.。。

View Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
#define MAXN 2000100
char str1[MAXN],str2[MAXN],str[10];
int  dx[MAXN];
int N, lenmax, lenmin;int lowbit( int x )
{    return x&-x;   
}void add( int x, int val, int M)
{while( x <= M ){dx[x] += val;x += lowbit(x);}     }int sum( int x )
{int num = 0;while( x > 0 ){num += dx[x];x -= lowbit( x );      }   return num;  
}void pre( )
{int i = 1;int len1 = strlen(str1+1), len2 = strlen(str2+1);lenmin = len1 < len2 ? len1 : len2;while( i <= len1 ){if( str1[i] == str2[i] ){add(i, 1, lenmin);   }     i++;       }          
}bool jugde(int start, int x)
{int x1 = sum(start+x-1) - sum(start-1);if( x1 == x )return true;return false;
}int find( int l, int r, int start)
{int ans = 0;while( l <= r ){int mid = (l + r)/2;if( jugde(start,mid) ){ans = mid;l = mid + 1;    }else r = mid - 1; }return ans;  
}int main( )
{int T, a, b, c, ans = 1;scanf("%d",&T);while( T-- ){scanf("%s%s",str1+1,str2+1);      scanf("%d",&N);memset(dx,0,sizeof(dx));pre( );printf("Case %d:\n",ans++);for( int i = 1; i <= N; i++){scanf("%d",&a);if( a == 2 ){scanf("%d",&b);b++;printf("%d\n",find(0,lenmin,b));}else{ scanf("%d%d%s",&b,&c,str);c++;  if( str1[c] == str2[c] && str[0] != str1[c] ){add(c,-1,lenmin);if( b == 1 )str1[c] = str[0];elsestr2[c] = str[0];}else if( str1[c] != str2[c] ){if( b == 1 ){if( str2[c] == str[0] ){add(c,1,lenmin);   str1[c] = str[0];     }elsestr1[c] = str[0];    }else if( b == 2 ){if( str1[c] == str[0] ){add(c,1,lenmin);   str2[c] = str[0];     }     elsestr2[c] = str[0];  }     } }}     }return 0;
}

HASH,要用到差值取模,时间复杂度为O( Q * lgN),写了一两个小时,还在调试中。。代码能力弱啊。。。

明天继续搞。。

郁闷啊。。从下到上的最大长度写了N久没写出,自己感觉真的不好写,从上到下真的很好写,利用回溯,写起来真的方便,自己。。

一直被标程的从下到上困扰,真的二,忘记了还可以从上到下。thanks 旭。。

View Code
#pragma comment(linker, "/STACK:16777216")
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
#define MAXN 1000010
#define Prime 29
#define LL long long
struct node
{int left, right;LL w1,w2;
}seg[MAXN<<4];
char str1[MAXN], str2[MAXN], str[10];
LL P[MAXN];
int num[MAXN], nmax;void pre( )
{P[0] = 1;for( int i = 1;  i <= 1000005; i++)P[i] = P[i-1] * Prime;     }void build( int l, int r, int root )
{int mid = (l + r) / 2;seg[root].left = l;seg[root].right = r;if( l == r ){seg[root].w1 = str1[l];seg[root].w2 = str2[l];num[l] = root;return;  }build(l, mid, root * 2 );build(mid+1,r,root * 2 + 1);seg[root].w1 = seg[root << 1].w1 + seg[(root<<1)+1].w1 * P[( seg[root<<1].right - seg[root<<1].left + 1)];seg[root].w2 = seg[root << 1].w2 + seg[(root<<1)+1].w2 * P[( seg[root<<1].right - seg[root<<1].left + 1)];
}void Modify( int root, int x, char c, int f)
{int mid = (seg[root].left + seg[root].right) / 2;int l = seg[root].left;int r = seg[root].right;if( l == x && r == x ){if( f == 1 )seg[root].w1 = c ;elseseg[root].w2 = c ;return;}if( x > mid )Modify( (root << 1) + 1, x, c, f);elseModify( root << 1, x, c, f);if( f == 1 )seg[root].w1 = seg[root << 1].w1 + seg[(root<<1)+1].w1 * P[( seg[root<<1].right - seg[root<<1].left + 1)];elseseg[root].w2 = seg[root << 1].w2 + seg[(root<<1)+1].w2 * P[( seg[root<<1].right - seg[root<<1].left + 1)];            
}int find( int p)
{if( seg[p].w1 == seg[p].w2 ){return seg[p].right - seg[p].left + 1;  }else if( seg[p].left != seg[p].right ){int ret = find( p << 1);if( ret == seg[p<<1].right - seg[p<<1].left + 1 ){ret +=  find( (p << 1) + 1);    }return ret;  }elsereturn 0;
}int sum( int p, int x)
{if( seg[p].left == seg[p].right ){if( seg[p].w1 == seg[p].w2 ){return 1;    }   elsereturn 0;   }    else{int mid = (seg[p].left + seg[p].right) / 2, ret;if( x <= mid ){ret = sum( p << 1, x );if( ret == seg[p<<1].right - x + 1 ) //左子树满的
         {ret += find((p << 1) + 1);} }    else{ret = sum( (p << 1) + 1, x );    }return ret; }  
}int main( )
{int N,T, a, b, c, abc = 1;scanf("%d",&T);pre( );while( T-- ){scanf("%s%s",str1,str2);scanf("%d",&N);int len1 = strlen(str1);int len2 = strlen(str2);nmax = len1 < len2 ? len1 : len2;build(0,nmax-1,1);printf("Case %d:\n",abc++);for( int i = 1; i <= N; i++){scanf("%d",&a);if( a == 2 ){scanf("%d",&b);if( b >= nmax ){puts("0");continue;    }printf("%d\n",sum(1,b));        }else{scanf("%d%d%s",&b,&c,str);if( c >= nmax ){// puts("0");continue;}Modify(1,c,str[0], b);}}}return 0;
}

转载于:https://www.cnblogs.com/tangcong/archive/2012/08/03/2622337.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

201904快速阅读术

在看过了几本数之后&#xff0c;发现原来培养读书的习惯好像也不太难&#xff0c;“将读书融入生活&#xff0c;框定读书时间” 生活中&#xff0c;我确实也是这样执行了。利用每天上下班的时间听书&#xff0c;有些觉得可以读快的书籍用了1.5倍速度在听&#xff0c;难懂的部分…

js(Dom+Bom)第二天(2)

webAPI 00-操作图片 知识点-获取图片src属性 图片对象.src ----> 获取图片路径注意: 1. 获取到的图片路径是一个绝对路径知识点-动态的给图片标签设置路径 图片对象.src 图片路径;注意: 1.可以设置绝对路径(不推荐) 2.可以设置相对路径课堂案例-切换图片案例 01-操作标…

javaScript今日总结

javascript简单介绍ECMAScript 1.语法 2.变量&#xff1a;只能使用var定义&#xff0c;如果在函数的内容使用var定义&#xff0c;那么它是一个局部变量&#xff0c;如果没有使用var它是一个全局的。弱类型&#xff01; 3.数据类型&#xff1a;原始数据类型(undefined/null/stri…

使用Connector / Python连接MySQL/查询数据

使用Connector / Python连接MySQL connect()构造函数创建到MySQL服务器的连接并返回一个 MySQLConnection对象 在python中有以下几种方法可以连接到MySQL数据库&#xff1a; 1.使用connect&#xff08;&#xff09;构造函数import mysql.connectorcnx mysql.connector.connect…

最简方式 表格编辑 基于 el-table

共下面5点1.新增一个显示和隐藏的参数2.在显示那边新增一个input框&#xff0c;用v-model绑定数据&#xff0c;用v-if来显示和隐藏3.给之前的显示的span标签添加v-else 和上面形成if else4.编辑和保存按钮同理&#xff0c;然后编辑按钮触发的任务将所有输入打开。即seen置为tru…

js(Dom+Bom)第三天(1)

JavaScript-DOM 节点的层次结构 hasChildNodes() 【父元素中是否包含子节点】 dom.hasChildNodes() 总结&#xff1a;1.该方法返回的是一个布尔类型的结果用来判断当前元素中是否存在子节点。2.该方法会将元素中所有的节点都获取&#xff08;包括空格&#xff0c;回车符&#…

Spring Boot 自动配置原理

自动配置原理配置文件到底能写什么&#xff1f;怎么写&#xff1f;自动配置原理&#xff1b; 参考&#xff1a;https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#common-application-properties配置文件能配置的属性参照1、自动配置原理&#xff…

这 4 款实用小工具,能让你的电脑变得好用又骚气

在日常生活中&#xff0c;我们总会遇到一些重复又繁琐的工作&#xff0c;它们不仅容易令人烦躁&#xff0c;也极大拖累了咱们的效率。其实&#xff0c;咱们完全可以通过一些工具提升效率&#xff0c;为自己节约出大量时间来干别的~今天就再给大家推荐 4 个免费的 Windows 平台的…

js(Dom+Bom)第三天(2)

webAPI 0-操作标签属性 系统属性 作用: 1. 可以操作标签身上的任何一个系统中的自带属性 (id, class, name ....) 2. 还可以操作用户自定义的属性dom.getAttribute(属性名)&#xff1b; 作用: getAttribute(属性名) 方法 就是用来获取标签身上属性的备注: 1. getAttribute() 方…

xshell使用指南

shell使用指南 ZMODEM功能 yum install lrzsz rz 上传 sz 下载 快捷键 alt o 打开终端 alt 1-9 切换 ctrl alt 切换 ctrl shift n 打开新选项卡 vim的小键盘不能使用的问题 在会话的属性中&#xff0c;将VT模式的初始数字键盘设置为普通 配色方案 保存成xcs文件&#xff0c…

C#Socket编程详解(一)TCP与UDP简介

一、TCP与UDP&#xff08;转载&#xff09; 1、TCP 1.1 定义 TCP&#xff08;TransmissionControl Protocol&#xff09;传输控制协议。 是一种可靠的、面向连接的协议&#xff08;eg:打电话&#xff09;、传输效率低全双工通信&#xff08;发送缓存&接收缓存&#xff09;、…

动态创建表格数据

<input type"button" value"创建"><style>*{margin: 0;padding: 0;}table{width: 980px;margin: 50px auto;}table,th,tr,td{text-align: center;border: 1px solid #ccc;}</style><script>var heads [姓名, 年龄, 性别, 学号, 薪…

第四节:EF Core的并发处理

1.说明 和EF版本的并发处理方案一致&#xff0c;需要知道乐观并发和悲观并发的区别&#xff0c;EF Core只支持乐观并发&#xff1b;监控并发的两种方案&#xff1a;监测单个字段和监测整条数据&#xff0c;DataAnnotations 和 FluentApi的两种配置方式。 &#xff08;PS&#x…

js(Dom+Bom)第四天(1)

webAPI 1-通过DOM节点方式获取元素 1-0注意事项 下面的内容都在在文档树上直接操作的 (节点 元素)重点是: 与元素相关的内容1-1与父节点相关的操作方式 1-1-1.知识点-判断父元素中是否有子节点 语法: DOM.hasChildNodes();总结: 该方法返回的是一个布尔类型的结果该方法会…

vue官方eslint插件配置eslint-plugin-vue-libs

由于eslint-config-vue已经被废弃&#xff0c;于是总结了一下eslint-plugin-vue-libs的eslint config配置&#xff0c;如下&#xff1a; module.exports {extends: [plugin:vue/essential],plugins: [vue-libs],parserOptions: {parser: require.resolve(babel-eslint),ecmaVe…

JS中的prototype

JS中的phototype是JS中比较难理解的一个部分(转自出处&#xff1a;&#xff08;http://www.cnblogs.com/yjf512/&#xff09;) 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是&#xff0c;现在有1个类A,我想要创建一个类B,…

微博发布案例

推荐在写动态生成标签数据的时候&#xff0c;提前写一遍htmlcss的结构&#xff0c;方便提供写照模板 <div class"box"><!-- 顶部搜索框 --><div class"inputBox"><textarea maxlength"200"></textarea></div&…

1.3 Go语言基础之数据类型

Go语言中有丰富的数据类型&#xff0c;除了基本的整型、浮点型、布尔型、字符串外&#xff0c;还有数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;等。Go 语言的基本类型和其他语言大同小异。 一、整型 1.1 基本类型 整型分为以下两个大类&#xff1a; 按…

Oracle新建用户并授权

使用拥有dba权限的用户都可以新建用户以及授权 1、新建用户 create user 用户名 identified by 密码&#xff1b; 2、授权 grant connect, resource to 用户名; grant dba to 用户名; 转载于:https://www.cnblogs.com/langgj/p/11387485.html

【网络安全】关于ARP攻击的原理以及在Kali Linux环境下的实现

转自&#xff1a;https://www.cnblogs.com/rebrust/p/6096101.html 全文摘要 本文讲述内容分为两部分&#xff0c;前半部分讲述ARP协议及ARP攻击原理&#xff0c;后半部分讲述在Kali Linux环境下如何实现ARP攻击以及ARP欺骗&#xff0c;如果对于ARP攻击的背景和原理不感兴趣的话…