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 ...
随机推荐
- Repeater控件的分隔线
在Repeater控件中,很容易实现在行与行之间使用分隔线.因为此控件有内置的SeparatorTemplate模版.举个例子吧: 运行时,可以看到效果: 说句实在的话,Insus.NET做一条水平线 ...
- WC2019 冬眠记
Day1 做高铁来广州 晚上开幕式,亮点在CCF的日常讲话.dzd有事换wh讲. 我们WC比赛的人数是最多的,性价比是最高的 然后掌声雷动 相信大家鼓掌是同意我的话 再次掌声雷动(雾 Day2-Day ...
- Kafka 练习题
一.选择题 Kafka服务器默认能接收的最大消息是多大? (单选) A A:1M B:10M C:100M D:没有大小限制,因为支持大数据 2.Kafka的特性(多选) ABCD A:高吞吐量.低 ...
- History命令用法15例
以下内容为转载: 如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTT ...
- 老男孩Day8作业:FTP
1.作业需求 开发简单的FTP: 1. 用户登陆 2. 上传/下载文件 3. 不同用户家目录不同 4. 查看当前目录下文件 5. 充分使用面向对象知识 2.流程图 3.目录结构 4.代码区 bin目录 ...
- 剑指offer —— 二维数组的查找
1.问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 2.思路:只看题目本身 ...
- 状压DP【洛谷P1879】 [USACO06NOV]玉米田Corn Fields
P1879 [USACO06NOV]玉米田Corn Fields 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形 ...
- Julia体验 语言基础
以前听说过Julia,不过那时候官网还处于时不时宕机状态,最近Julia发布了1.0 released版本到处都是它的资讯,官网良心自带简体中文,趁着热度我也来试试,顺便聊记一二. 关于Julia J ...
- PAT天梯赛 L1-050 倒数第N个字符串
题目链接:点击打开链接 给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增.例如当 L 为 3 时,序列为 { aaa, ...
- thrift 通信的使用 /安装
参考: http://blog.csdn.net/yohunl/article/details/41748511 http://blog.csdn.net/amuseme_lu/article/det ...