清北刷题冲刺 11-02 p.m
函数最值

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
using namespace std;
int n;
long long a[maxn],ans,sum[maxn];
char s[maxn];
long long qread(){
int i=,j=;
char ch=getchar();
while(ch<''||ch>''){if(ch=='-')j=-;ch=getchar();}
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i*j;
}
int main(){
freopen("maximum.in","r",stdin);freopen("maximum.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
a[i]=qread();
sum[i]=sum[i-];
if(a[i]>)sum[i]=sum[i-]+a[i];
}
scanf("%s",s+);
long long c=;
for(int i=n;i>=;i--)//枚举从哪一位开始
if(s[i]==''){
ans=max(ans,c+sum[i-]);
c+=max(a[i],0LL);
}
ans=max(ans,c);
cout<<ans;
}
100分 贪心
函数最值2

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,k,a[maxn],pla[],cnt,b[maxn];
long long ans=;
int count(int x){
int res=;
while(x){
if(x&)res++;
x>>=;
}
return res;
}
bool pos[maxn];
long long Abs(long long x){
if(x>=)return x;
if(x<)return -x;
}
int main(){
freopen("minimum.in","r",stdin);freopen("minimum.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<(<<n);i++)
if(count(i)==k)pla[++cnt]=i;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=cnt;i++){
memset(pos,,sizeof(pos));
int p=;
int now=pla[i];
while(now){
p++;
if(now&)pos[p]=;
now>>=;
}
for(int j=;j<=n;j++){
if(pos[j]==||j==)b[j]=a[j];
else b[j]=b[j-];
}
long long sum=;
for(int j=;j<=n;j++){
sum=max(sum,Abs(b[j]-b[j-]));
}
ans=min(ans,sum);
}
cout<<ans;
}
20分 暴力
/*
二分两个数之间的差的最大值
F[i]表示i不改变的最小修改的元素个数
f[i]=min(f[j]+(i-j-1),i-1) abs(A[j]-A[i])<二分出来的答案*(i-j)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define maxn 2010
using namespace std;
int n,k,a[maxn],f[maxn];
bool check(int x){
f[]=;
int ans=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-));//假设改了(j~i)的数
ans=min(ans,f[i]+n-i);//假设最后一个数改了
}
return ans<=k;
}
int main(){
freopen("minimum10.in","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int l=,r=,ans=;
while(l<=r){
int mid=(l+r)>>;
if(check(mid))ans=mid,r=mid-;
else l=mid+;
}
printf("%d",ans);
return ;
}
100分 二分+dp
序列

#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 100010
using namespace std;
int n,X,Y,sum[maxn];
bool ok[][];
char s[maxn];
int Gcd(int x,int y){
if(y==)return x;
return Gcd(y,x%y);
}
int main(){
freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&n,&X,&Y);
scanf("%s",s+);
for(int i=;i<=n;i++){
sum[i]=sum[i-];
if(s[i]=='A')sum[i]=sum[i-]+;
}
for(int len=;len<=n;len++){//枚举长度
for(int l=;l+len-<=n;l++){
int r=l+len-;
int cntA=sum[r]-sum[l-];
int cntB=len-cntA;
int g=Gcd(cntA,cntB);
cntA/=g;cntB/=g;
if(cntA==X&&cntB==Y)ok[l][r]=;
}
}
int q;
scanf("%d",&q);
int l,r,ans;
while(q--){
scanf("%d%d",&l,&r);
bool flag=;
for(int len=r-l+;len>=;len--){
for(int i=l;i+len-<=r;i++){
int j=i+len-;
if(ok[i][j]){
ans=len;
flag=;
break;
}
}
if(flag)break;
}
printf("%d\n",ans);
}
}
25分 暴力
预计得分100++
实际得分100++
T1写了一个小时的数位dp,然后调不出来了,发现可以贪心,就写了贪心。T2T3看了没什么思路,T2前30分可以状压,T330分貌似爆搜就能过,可能代码写的丑
今天的暴力分都得的不全,希望能把暴力写的优美一点
小结
清北刷题冲刺 11-02 p.m的更多相关文章
- 清北刷题冲刺 11-03 a.m
纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 2017-10-2 清北刷题冲刺班p.m
最大值 (max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...
- 清北刷题冲刺 11-02 a.m
卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 清北刷题冲刺 11-01 p.m
轮换 #include<iostream> #include<cstdio> #include<cstring> #define maxn 1010 using n ...
- 清北刷题冲刺 10-31 a.m
集合 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ], ...
- 清北刷题冲刺 10-30 a.m
星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...
- 清北刷题冲刺 10-29 p.m
洗澡 /* 这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对 */ #include<iostream> #include<cstdio> #inc ...
- 清北刷题冲刺 10-28 p.m
水题(贪心) (water) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...
- 清北刷题冲刺 10-28 a.m
立方数 (cubic) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方 ...
随机推荐
- 分享知识-快乐自己:Java中各种集合特点
Java中各种集合特点: Collection[单列集合]: List(有序,可重复): ArrayList: 底层数据结构是数组,查询快,增删慢.线程不安全,效率高. Vector: 底层数据结构是 ...
- node.js+express+jade系列一:session的使用
此出只介绍内存session的配置好使用 1:打开app.js文件,添加下面红色内容,一定要注意位置在router前面 app.use(express.methodOverride()); sessi ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- css 多行文本以...代替
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 关于自动化与vTable两种暴露接口的区别-1未完......
COM组件有两种暴露组件接口的方式,一种是以虚拟列表的方式暴露:一种就是自动化方式. 虚拟列表(VTable): COM组件将自己所有的方法的地址以一个虚拟表的方式存放在一起,这个虚拟表是一种结构,有 ...
- 设计模式 之 《观察者模式 (Observer)》
#ifndef __OBSERVER_MODEL__ #define __OBSERVER_MODEL__ #include <string> #include <iostream& ...
- do-while-zero 结构在宏定义中的应用
do while 语句在使用宏定义时是一个有用的技巧,说明如下: 假设有这样一个宏定义 #define macro(condition) / if(condition) dosomething() 现 ...
- HDU4699:Editor
浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=46 ...
- bzoj 1941 [Sdoi2010]Hide and Seek——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1941 第二道KDtree! 枚举每个点,求出距离它的最远和最近距离.O( n * logn ...
- 在浏览器中输入url并回车后发生了什么?
1 解析url url主要由以下几个部分组成: 1 传输协议 2 服务器 3 域名 4 端口 5 虚拟目录 6 文件名 7 锚 8 参数 2 DNS(域名)解析 找到域名对应的ip 3 浏览器与网站建 ...