T1

模拟,80?

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<ctime>
using namespace std;
typedef long long LL;
const int N=1e5+;
int a[N],n,len;
char s[N];
int w[N],maxn;
LL f[N],tot;
int main()
{
freopen("maximum.in","r",stdin);
freopen("maximum.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
cin>>(s+);
for(int i=;i<=n;i++)
{
w[i]=s[i]-'';
if(w[i]) maxn=i;
}
for(int i=;i<=maxn;i++)
{
f[i]=f[i-];
if(a[i]>) f[i]+=a[i];
}
w[]=;tot=;
while(maxn>=)
if(w[maxn])
{
if(a[maxn]<=)
{
cout<<(f[maxn-]+tot)<<endl;
return ;
}
tot+=a[maxn];
while(!w[maxn-]) maxn--;
maxn--;
}
cout<<tot<<endl;
return ;
}

first 80

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<ctime>
using namespace std;
typedef long long LL;
const int N=1e5+;
int a[N],n,len;
char s[N];
int w[N],maxn;
LL f[N],tot=,ans=;
int main()
{
freopen("maximum.in","r",stdin);
freopen("maximum.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
cin>>(s+);
for(int i=;i<=n;i++)
{
w[i]=s[i]-'';
if(w[i]) maxn=i;
}
f[]=;
for(int i=;i<=maxn;i++)
{
f[i]=f[i-];
if(a[i]>) f[i]+=a[i];
}
w[]=;tot=;
for(int i=maxn;i>=1;i--)
if(w[i])
{
// printf("%lld %lld\n",i,tot+f[i-1]);
ans=max(ans,tot+f[i-1]);
tot+=a[i];
}
cout<<ans<<endl;
return ;
}
w[]=;tot=;LL all=f[maxn];
while(maxn>=)
{
if(a[maxn]<=)
{
cout<<(f[maxn-]+tot)<<endl;
return ;
}
tot+=a[maxn];
while(!w[maxn-]) maxn--;
maxn--;
}

调了半天,我终于发现了错误所在。

说实话:我错的真不怨,我感觉很高兴,因为我找到了自己的思维误区。

怎么说呢:最大值可能出现在这些情况中的任意一个:

        1除了最高位对应的数外,其他任意位上数的组合。(最高位是0)

        2第二高的为0,其他的任意位上的数的组合。(最高位是1)

        3第三高的为0,其他位上任意数的组合。(前两高的是1)

        ............   这道题中的 最高位 是指 m的二进制位为1的。

做的时候还不如取个max那,我只是想当然的认为:

  当最高位是是负数时,前面的一定比后面的要更优。(这是对的,但是)

  我却认为这时,不加这个最高位的负数的结果是最优的。

其实不然,这时,对于不加这位的结果前面都算过,这一次却不一定是最优的!!!!!!

T2

二分+dp

奇怪的贪心。

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<ctime>
using namespace std;
const int N=;
int a[N],b[N];
int n,k;
int L,R,mid,ans;
bool check(int x)
{
int sum=,sum0=1e9+;
for(int i=;i<=n;i++)
a[i]=b[i];
a[n+]=a[n];
for(int i=;i<=n;i++)
{
if(abs(a[i]-a[i-])>x)
{
if(a[i]>a[i-])
{
a[i]=a[i-]+x;
sum++;
}else
if(a[i-]>a[i])
{
a[i]=a[i-]-x;
sum++;
}
}
}
int i=,j=n;
for(int i=;i<=n;i++,j--)
a[i]=b[j];
a[n+]=a[n];
for(int i=;i<=n;i++)
{
if(abs(a[i]-a[i-])>x)
{
if(a[i]>a[i-])
{
a[i]=a[i-]+x;
sum0++;
}else
if(a[i-]>a[i])
{
a[i]=a[i-]-x;
sum0++;
}
}
}
sum=min(sum,sum0);
return sum<=k;
}
int main()
{
freopen("minimum.in","r",stdin);
freopen("minimum.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
{
scanf("%d",&b[i]);
R=max(R,b[i]);
}
if(k>=n-)
{
cout<<<<'\n';
return ;
}
L=,R;
while(L<=R)
{
mid=(L+R)/;
if(check(mid)) R=mid-,ans=mid;
else L=mid+;
}
cout<<ans<<'\n';
return ;
}

first 30

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int n,k;
int a[],f[];
int L,R,mid;
bool check(int x)
{
f[]=;
int ans=n;//最大不超过n
for(int i=;i<=n;i++)
{
f[i]=i;
for(int j=;j<i;j++)
if(abs(a[i]-a[j])<=(1LL*x*(i-j)))
f[i]=min(f[i],f[j]+(i-j-));
ans=min(ans,f[i]+n-i);
}
return ans<=k;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
L=,R=1e9+;
while(L<R-)
{
mid=(L+R)>>;
if(check(mid)) R=mid;
else L=mid;
}
if(check(L)) printf("%d\n",L);
else printf("%d\n",R);
return ;
}

二分+dp判断

T3

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<ctime>
using namespace std;
const int N=1e3+;
char s[N];
int n,x,y,len;
int q,l,r;
int A[N],B[N];
bool ok[N][N];
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%d%d%d",&n,&x,&y);
cin>>(s+);
for(int i=;i<=n;i++)
{
A[i]=A[i-];B[i]=B[i-];
if(s[i]=='A') A[i]++;
else B[i]++;
}
for(int i=;i<=n;i++)
for(int j=i;j<=n;j++)
{
int Asum,Bsum;
Asum=A[j]-A[i-];Bsum=B[j]-B[i-];
if(1LL*Asum*y==1LL*Bsum*x) ok[i][j]=;
} scanf("%d",&q);
while(q--)
{
scanf("%d%d",&l,&r);
int L=r-l+;
for(L;L>=;L--)
for(int i=l;i+L-<=r;i++)
if(ok[i][i+L-])
{
printf("%d\n",L);
L=,i=r+;break;
}
}
return ;
}

first

待续。。。。。。

1用和为0,判断,链表查询,O( n q)。

2分块。

3可持久线段树。。。难写。

最短 函数线段树

Day6 下(的更多相关文章

  1. Linux:Day6(下) vim编辑器

    vim编辑器 简介: vi:Visual Interface,文本编辑器 文本:ASCII,Unicode 文本编辑种类: 行编辑器:sed 全屏编辑器:nano,vi VIM - Vi IMprov ...

  2. 清北考前刷题day6下午好

    /* 贪心 负数一定不取 枚举最高位是1 且答案取为0的 位置, 更新答案. */ #include<iostream> #include<cstdio> #include&l ...

  3. day--6_python常用模块

    常用模块: time和datetime shutil模块 radom string shelve模块 xml处理 configparser处理 hashlib subprocess logging模块 ...

  4. Python函数-导入模块的顺序及原理

    引入 当python导入模块,执行import语句时,到底进行了什么操作?按照python的文档,她执行了如下的操作: 第一步,创建一个新的module对象(它可能包含多个module) 第二步,把这 ...

  5. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  6. day6、Linux下如何找出7天以前的文件删除

    有些时候,由于系统产生的日志文件,使服务器的磁盘空间紧张,所以怎么删除7天以前的日志文件及让系统只保留7天以内的日志文件 方法一 使用命令:find + |xargs + ls 命令方法:find / ...

  7. Python之路,Day6 - Python基础6

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  8. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  9. pytho day6 <正则表达式、常用模块、反射>

    本节介绍: 一:正则表达式: 正则表达并不是python 独有的.在各个语言里都有该语法的介绍.正则表达是处理字符串的强大的处理工具.拥有自己的独特的 处理方法.和处理引擎.虽然性能没有python ...

随机推荐

  1. JDK Linux下安装

    下载jdk-6u45-linux-x64.bin到/root目录下执行./jdk-6u45-linux-x64.bin 会在/root目录下生成 jdk1.6.0_45 文件 之后配置环境变量 编辑/ ...

  2. day06.1-磁盘管理

    1. 添加磁盘 打开虚拟机,依次点击"编辑虚拟机设置" |—> "添加" |—> "硬盘" |—> "选择硬盘类 ...

  3. vtk-py求3d模型表面积

    模型格式:.obj 环境:python3.6+vtk7.1 vtk版: import vtk filename = "XXXX.obj" reader = vtk.vtkOBJRe ...

  4. P3703 [SDOI2017]树点涂色 LCT维护颜色+线段树维护dfs序+倍增LCA

    \(\color{#0066ff}{ 题目描述 }\) Bob有一棵\(n\)个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点 ...

  5. 面试题 和 python 2与3的期区别

      1.3 python2与python3的一些区别 大环境下的区别:python2:1,源码都含有php,Java,C,等语言的规范陋习,2,重复代码特别多. python3:源码很规范,清晰,简单 ...

  6. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  7. Github如何在Linux系统下创建本地仓库

    一.电脑上安装 Git Ubuntu安装GIt:  apt-get install git 查看版本信息:    git version 配置Git用户信息  输入: git config --glo ...

  8. 浅谈c语言的线性表的基本操作———基于严蔚敏的数据结构(c语言版)

    主要讲的是线性表的创建,插入及删除: 0. 线性表的建立,对于这类操作主要是利用了结构体的性质,对于定义的线性表的特性主要有三点:首先 Typedef struct { ElemType   *ele ...

  9. Vue全家桶了解一下(待补充)

    vue全家桶了解一下 一.vue+vue-router+vuex+axios1.vue:使用vue-cli,生成最基本的vue项目2.vue-router:vue项目中的路由管理插件3.vuex:vu ...

  10. codeforces 620D Professor GukiZ and Two Arrays

    #include <bits/stdc++.h> using namespace std; + ; const long long inf = 1e18; int n, m; long l ...