diyiti.cpp
diyiti.cpp/c/pas diyiti.in diyiti.out 2s/256MB
给定两个01串,S,T(下标从0开始)。
支持如下3种操作:
1. 修改S第i位的字符,即0->1,1->0.
2. 修改T第i位的字符,即0->1,1->0.
3. 查询S[a..a+l-1],T[b..b+l-1]的相似度。
相似度定义如下:
s,t两个字符串的相似度=sigma_{i=0}^{|s|-1} sim(s[i],t[i])
sim(a,b) 有四个参数p_{0,0},p_{0,1},p_{1,0},p_{1,1}。 sim(a,b)的返回值为p_{a,b}。
input
第一行一个非空字符串S
第二行一个非空字符串T
第三行一个操作个数Q
接下来Q行,每行为"1 i","2 i"或"3 a b l p_{0,0} p_{0,1} p_{1,0} p_{1,1}"
output
若干行,每行对应每个3操作的答案。
sample in
sample out
10%, |S|,|T|<=1000,Q<=1000
10%, |S|,|T|<=50000,Q<=50000,3操作的p值都为1
10%, |S|,|T|<=50000,Q<=50000,所有操作为3操作且a,b,l相同
20%, |S|,|T|<=50000,Q<=50000,3操作的a,b值为0
50%, |S|,|T|<=100000,Q<=100000,0<=p<=50,由于数据随机生成,可以默认3操作l的期望为|S|/6
压位。。
# include <iostream>
# include <cstdio>
# include <iostream>
# include <cstring>
using namespace std;
const int MAXN=,bit=;
typedef long long ll;
ll a[MAXN],b[MAXN],f1[MAXN],f2[MAXN],f[MAXN];
int len1,len2;
char s[MAXN],pp[MAXN];
void work1()
{
int x; scanf("%d",&x); x++;
a[x]=a[x] ^ ;
for (int i=max(,x-bit);i<=min(x,len1-bit);i++)
f1[i]=f1[i] ^ (<<(x-i));
}
void work2()
{
int x; scanf("%d",&x); x++;
b[x]=b[x] ^ ;
for (int i=max(,x-bit);i<=min(x,len2-bit);i++)
f2[i]=f2[i] ^ (<<(x-i));
}
void work3()
{
int al,bl,len,p1,p2,p3,p4;
scanf("%d%d%d%d%d%d%d",&al,&bl,&len,&p1,&p2,&p3,&p4);
int ans=;
al++; bl++;
for (int i=;i<=len/(bit+);i++) {
ans=ans+f[(f1[al] ^ ((<<(bit+))-))&(f2[bl] ^ ((<<(bit+))-))]*p1;//0 0
ans=ans+f[(f1[al] ^ ((<<(bit+))-))&f2[bl]]*p2; //0 1
ans=ans+f[f1[al] & (f2[bl] ^ ((<<(bit+))-))]*p3;// 1 0
ans=ans+f[f1[al] & f2[bl]]*p4;// 1 1
al=al+(bit+); bl=bl+(bit+);
}
//最后一个压位后的数
for (int i=;i<=len%(bit+)-;i++) {
if ((a[i+al]==)&&(b[i+bl]==)) ans=ans+p1;
if ((a[i+al]==)&&(b[i+bl]==)) ans=ans+p2;
if ((a[i+al]==)&&(b[i+bl]==)) ans=ans+p3;
if ((a[i+al]==)&&(b[i+bl]==)) ans=ans+p4;
}
printf("%d\n",ans);
}
int main()
{
freopen("diyiti.in","r",stdin);
freopen("diyiti.out","w",stdout);
for (int i=;i<=<<(bit+)-;i++)
{
int x=i;
while(x>) {
f[i]=f[i]+;//数i有几个1
x=x & (x-);
}
}
//for (int i=0;i<=20;i++) printf("%d %d\n",i,f[i]);
cin>>s;
for (int i=;i<=strlen(s);i++) pp[i+]=s[i];
len1=strlen(s);
for (int i=;i<=len1;i++) s[i]=pp[i];
for (int i=;i<=len1;i++) a[i]=s[i]-''; //a表示一个大二进制数A cin>>s;
for (int i=;i<=strlen(s);i++) pp[i+]=s[i];
len2=strlen(s);
for (int i=;i<=len2;i++) s[i]=pp[i];
for (int i=;i<=len2;i++) b[i]=s[i]-''; //b表示一个大二进制数B for (int i=;i<=len1-bit;i++)
for (int j=;j<=bit;j++)
f1[i]=f1[i]+a[i+j]<<j; //A每bit位压成一个整数 f1
for (int i=;i<=len2-bit;i++)
for (int j=;j<=bit;j++)
f2[i]=f2[i]+b[i+j]<<j; //B每bit位压成一个整数 f2
int q; scanf("%d",&q);
while (q)
{
int ch; scanf("%d",&ch);
if (ch==) work1();
else if (ch==) work2();
else if (ch==) work3();
q--;
}
return ;
fclose(stdin); fclose(stdout);
}
diyiti.cpp的更多相关文章
- 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码
前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...
- Json CPP 中文支持与入门示例
在每一个Json Cpp自带*.cpp文件头加上: #include "stdafx.h" 将Json Cpp对自带的头文件的引用修改为单引号方式,例如json_reader.cp ...
- cpp 调用python
在用cpp调用python时, 出现致命错误: no module named site , 原因解释器在搜索路径下没有找到python库.可以在调用Py_Initialize前,调用 Py_Se ...
- nginx+fastcgi+c/cpp
参考:http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/ 跟着做了一遍,然后根据记忆写的,不清楚有没错漏步骤,希望多多评论多多 ...
- APM程序分析-ArduCopter.cpp
该文件是APM的主文件. #define SCHED_TASK(func, rate_hz, max_time_micros) SCHED_TASK_CLASS(Copter, &copter ...
- APM程序分析-AC_WPNav.cpp
APM程序分析 主程序在ArduCopter.cpp的loop()函数. /// advance_wp_target_along_track - move target location along ...
- Dev Cpp 输出中文字符问题
最近 c++ 上机作业,vc++6.0 挂了没法用,只好用 Dev Cpp 先顶替一下,然而在遇到输出中文字符的时候出现了乱码的情况,但这种情况又非常诡异.于是简单了解了一下写成此博客. [写在前面] ...
- 【安卓】aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creating directories: Invalid argument
这几天在使用.aidl文件的时候eclipse的控制台总是爆出如下提示: aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creatin ...
- Identify Memory Leaks in Visual CPP Applications —— VLD内存泄漏检测工具
原文地址:http://www.codeproject.com/Articles/1045847/Identify-Memory-Leaks-in-Visual-CPP-Applications 基于 ...
随机推荐
- ccf201703-1分蛋糕
问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an.小明想分给每个朋友至少重量为k的蛋糕.小明的朋友们已经排好队准备领蛋糕,对于每个朋 ...
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...
- [图片生成]使用VAEs生成新图片
变分自动编码器生成图片 从隐图像空间进行采样以创建全新的图像或编辑现有图像是目前创作AI最受欢迎和最成功的应用方式. 图像隐空间取样 图像生成的关键思想是开发表示的低维潜在空间(自然是矢量空间),其中 ...
- vs编译器好多下划波浪线但不报错
解决办法:项目属性->c/c++->常规->附加包含目录->$(ProjectDir): $(ProjectDir) 项目的目录(定义形式:驱动器 + 路径):包括尾部的反斜杠 ...
- libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint
Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Bo ...
- jvm系列(八):jvm知识点总览
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...
- stl源码剖析 详细学习笔记 RB_tree (1)
// // RB_tree_STL.cpp // 笔记 // // Created by fam on 15/3/21. // // #include "RB_tree_STL.h&q ...
- vue-router单页应用简单示例(一)
请先完成了项目初始化,具体请看我另一篇博文.vue项目初始化 看一下完成的效果图,很典型的单页应用. .vue后缀名的单文件组件 这里先说一下我对组件的理解.组件,顾名思义就是一组元素组成的一个原 ...
- resource fork, Finder information, or similar detritus not allowed
1.关闭当前项目和Xcode 2.打开终端或者iterm cd ~/Library/Developer/Xcode/DerivedData/ 3. xattr -rc . 4.重新打开项目 5.如果不 ...
- 并发系列(一)-----synchronized关键字
一 简介 说到并发不得不提的synchronized,synchronized关键字是元老级别的角色.在Java SE 1.6之前synchronized被称为是重量,在1.6之后对同步进行了一系列的 ...