HDU 4339 Contest 4
树状数组,主要是抓住要求连续1的个数。这样,初始时,相同的加1,不同的加0.
查询时,用二分搜索右边界。就是比较当前mid-l+1的值与他们之间1的个数(这可以通过树状数组求区间和得出),记录右边界即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string.h>
#define lowbit(x) ((x)&(-(x))) using namespace std;
const int N= 1000015; char str1[N],str2[N];
int ptree[N]; int sum(int *a,int x){
if(x==0) return 0;
int s=0;
for(;x;x-=lowbit(x))s+=a[x];
return s;
} void update(int *a,int x,int w,int &n){
for(;x<=n;x+=lowbit(x))a[x]+=w;
} int ans[100005]; int binSearch(int l,int r){
int p=l-1,tmp;
int spre=sum(ptree,p);
int ans=l;
while(l<=r){
int mid=(l+r)/2;
tmp=sum(ptree,mid);
if(tmp-spre<mid-p)
r=mid-1;
else{
ans=mid;
l=mid+1;
}
}
return ans-p;
} int main(){
int T,Q,kase=0;
int ch,a,ii; char c;
scanf("%d",&T);
while(T--){
cin>>str1+1;
cin>>str2+1;
int len=min(strlen(str1+1),strlen(str2+1));
memset(ptree,0,sizeof(int)*(len+5));
for(int i=1;i<=len;i++){
if(str1[i]==str2[i])
update(ptree,i,1,len);
}
scanf("%d",&Q);
printf("Case %d:\n",++kase);
for(int i=1;i<=Q;i++){
cin>>ch;
if(ch==2){
cin>>a;
if(str1[a+1]!=str2[a+1]){
printf("%d\n",0);
}
else{
printf("%d\n",binSearch(a+1,len));
}
}
else{
cin>>a>>ii>>c;
// cout<<a<<ii<<c<<endl;
if(ii+1>len) continue;
if(a==1){
if(str1[ii+1]==str2[ii+1]){
str1[ii+1]=c;
if(str1[ii+1]==str2[ii+1])
continue;
else
update(ptree,ii+1,-1,len);
}
else{
str1[ii+1]=c;
if(str1[ii+1]==str2[ii+1])
update(ptree,ii+1,1,len);
}
}
else{
if(str1[ii+1]==str2[ii+1]){
str2[ii+1]=c;
if(str1[ii+1]==str2[ii+1])
continue;
else
update(ptree,ii+1,-1,len);
}
else{
str2[ii+1]=c;
if(str1[ii+1]==str2[ii+1])
update(ptree,ii+1,1,len);
}
}
}
}
}
return 0;
}
HDU 4339 Contest 4的更多相关文章
- HDU 5045 Contest(状压DP)
Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...
- hdu - 5045 - Contest(国家压缩dp)
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...
- [ACM] hdu 5045 Contest (减少国家Dp)
Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...
- hdu 4339 Query(两种思路求解)
Query Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- HDU–5988-Coding Contest(最小费用最大流变形)
Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- hdu 5045 Contest(状态压缩DP)
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...
- HDU 5045 Contest
pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me ...
- HDU - 4339: Query(bitset暴力找下一个为1的)
题意:给定A,B长度相同的字符串,Q次操作,修改操作位单个字符修改,查询操作为询问从某点开始有多少连续相同的字符. 思路:我们把不相同的设为1,相同的设为0,那么询问就是找下一个为1的为位置,可以用线 ...
- HDU 4335 Contest 4
利用降幂公式..呃,还是自己去搜题解吧.知道降幂公式后,就不难了. #include <iostream> #include <cstdio> #include <alg ...
随机推荐
- BA--无风机冷却塔
无风机冷却塔的优点 1.无运转振动噪音传统冷却塔噪声源为冷却风扇马达运转所产生,其诱发之塔体振动,具有噪音共振加强性,为有效抑制振动之传导,须加装防震铁架及避震器.因冷却方式不同,LFC-N型无风机科 ...
- http协议区分头信息和正文
http协议中的头信息和正文是採用空行分开,什么是空行呢?简单来说,就是\r\n\r\n. 所以将server返回的数据用\r\n\r\n分开后的结果,一个是头信息.一个是正文信息. C#的代码例如以 ...
- cocos2dx3.2 android平台搭建开发环境纠错备忘录
平台:win32 + android cocos2d版本号:3.2 搭建cocos2d-x android 常见问题: 问题1: Android platform not specified, sea ...
- Linux 安装Redis 5.0
结构如下: Redis 官方不建议Redis安装在WINDOWS 服务器上(尤其是生产中分布式事物缓存). linux 下Redis 5.0主从复制(一主二从)哨兵模式的搭建:https://www. ...
- python网络编程三次握手和四次挥手
TCP是因特网中的传输层协议,使用三次握手协议建立连接.当主动方发出SYN连接请求后,等待对方回答SYN+ACK[1],并最终对对方的 SYN 执行 ACK 确认.这种建立连接的方法可以防止产生错误的 ...
- Java io 操作
package tlistpackage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFou ...
- Unity3D基础
鼠标事件: OnMouseEnter():鼠标进入 OnMouseExit():鼠标移出 OnMouseDown():鼠标点击 OnMouseUp():鼠标抬起 static GameObject I ...
- 洛谷P1291 [SHOI2002]百事世界杯之旅(期望DP)
题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶 ...
- Caffe Batch Normalization推导
Caffe BatchNormalization 推导 总所周知,BatchNormalization通过对数据分布进行归一化处理,从而使得网络的训练能够快速并简单,在一定程度上还能防止网络的过拟合, ...
- 手游服务器端接入google的SDK
在接入google的SDK之前,当然先要用你的google开发者账号要去申请你接入的应用,这些步骤就直接省略了具体的步骤可以查看这篇博文:http://blog.csdn.net/hjun01/art ...