Day6 下(
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 下(的更多相关文章
- Linux:Day6(下) vim编辑器
vim编辑器 简介: vi:Visual Interface,文本编辑器 文本:ASCII,Unicode 文本编辑种类: 行编辑器:sed 全屏编辑器:nano,vi VIM - Vi IMprov ...
- 清北考前刷题day6下午好
/* 贪心 负数一定不取 枚举最高位是1 且答案取为0的 位置, 更新答案. */ #include<iostream> #include<cstdio> #include&l ...
- day--6_python常用模块
常用模块: time和datetime shutil模块 radom string shelve模块 xml处理 configparser处理 hashlib subprocess logging模块 ...
- Python函数-导入模块的顺序及原理
引入 当python导入模块,执行import语句时,到底进行了什么操作?按照python的文档,她执行了如下的操作: 第一步,创建一个新的module对象(它可能包含多个module) 第二步,把这 ...
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- day6、Linux下如何找出7天以前的文件删除
有些时候,由于系统产生的日志文件,使服务器的磁盘空间紧张,所以怎么删除7天以前的日志文件及让系统只保留7天以内的日志文件 方法一 使用命令:find + |xargs + ls 命令方法:find / ...
- Python之路,Day6 - Python基础6
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- pytho day6 <正则表达式、常用模块、反射>
本节介绍: 一:正则表达式: 正则表达并不是python 独有的.在各个语言里都有该语法的介绍.正则表达是处理字符串的强大的处理工具.拥有自己的独特的 处理方法.和处理引擎.虽然性能没有python ...
随机推荐
- iframe相关操作
内容摘要 父级获取iframe中的元素 父级触发iframe中的函数 iframe触发父级元素绑定的事件 iframe触发父级函数方法 iframe触发父级元素的值 parent.html <! ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂
[bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...
- ArrayList深度分析:ArrayList和数组间的相互转换
一.ArrayList转换为数组ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就 ...
- jupyter notebook 设置默认目录
1.打开 cmd 输入命令 jupyter notebook --generate-config 可以看到生成文件的路径,这个就是生成的配置文件jupyter_notebook_config.py, ...
- Blocks poj 区间dp
Some of you may have played a game called 'Blocks'. There are n blocks in a row, each box has a colo ...
- mysql 备份时间 %date~0,4%和 %time~0,2%等用法详解
比如在windowscmd命令行窗口执行date命令后这个环境变量的值为 当前日期:2014-09-01 星期六 或2014/09/01 周六 那么如下的各个操作的意义如下:%date:~0,4% 表 ...
- composer.json 配置设置
配置文件的值为 key:val 必须双引号包裹 一.配置文件 名字 name包名称由用户名名称和仓库名称组成包版本限制来请求Monolog软件包 1.0.*.这意味着1.0开发分支中的任何版本,或大于 ...
- Linux中apache服务
httpd访问控制生成共享文件vim var/www/html/cq/index.html编辑配置文件 vim /etc/httpd/conf/httpd.conf<Directory &quo ...
- nginx -s reload "/alidata/server/nginx/logs/nginx.pid" failed
[root@snoopy :: vhosts]# nginx -s reload nginx: [error] open() : No such file or directory) 修改完nginx ...
- 学习ssm
1.安装配置maven (1)在http://maven.apache.org/download.cgi下载apach-maven-3.5.4-bin.zip (2)将apach-maven-3.5. ...