函数最值

#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的更多相关文章

  1. 清北刷题冲刺 11-03 a.m

    纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  2. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  3. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  4. 清北刷题冲刺 11-02 a.m

    卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  5. 清北刷题冲刺 11-01 p.m

    轮换 #include<iostream> #include<cstdio> #include<cstring> #define maxn 1010 using n ...

  6. 清北刷题冲刺 10-31 a.m

    集合 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ], ...

  7. 清北刷题冲刺 10-30 a.m

    星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...

  8. 清北刷题冲刺 10-29 p.m

    洗澡 /* 这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对 */ #include<iostream> #include<cstdio> #inc ...

  9. 清北刷题冲刺 10-28 p.m

    水题(贪心) (water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...

  10. 清北刷题冲刺 10-28 a.m

    立方数 (cubic) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方 ...

随机推荐

  1. ListOperations

    RedisOperations<K,V> getOperations()  V index(K key, long index)  V leftPop(K key)  V leftPop( ...

  2. ES索引瘦身 压缩——_source _all 均disable filed store为no,引入第三方DB存储原始数据,去掉pos倒排和doc_values,强制定期merge segments,将所有fileds合并为一个field big string

    原始数据:835MB ES 设置了_source _all disabled 且设置了仅仅存docs倒排Wed Feb 22 11:58:27 CST 2017Before size:1 /home/ ...

  3. 【论文笔记】基于图机构的推荐系统:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba

    论文:https://arxiv.org/abs/1803.02349    题外话: 阿里和香港理工联合发布的这篇文章,整体来说,还挺有意思的. 刚开始随便翻翻看看结构图的时候,会觉得:这也能发文章 ...

  4. [: xxxx: Unexpected operator

    /*************************************************************************** * [: xxxx: Unexpected o ...

  5. G 唐纳德与子串(easy)(华师网络赛---字符串,后缀数组)(丧心病狂的用后缀自动机A了一发Easy)

    Time limit per test: 1.0 seconds Memory limit: 256 megabytes 子串的定义是在一个字符串中连续出现的一段字符.这里,我们使用 s[l…r] 来 ...

  6. 洛谷 P1767 家族_NOI导刊2010普及(10)

    题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏.现在给你岛上的 ...

  7. Java 编程规范,常见规范,命名规范,复杂度

    方法/步骤     1. *不允许把多个短语句写在一行中,即一行只写一条语句 1. 示例:如下例子不符合规范. LogFilename now = null;        LogFilename t ...

  8. js拼的onclick调用方法需要注意的地方 之二

    那如果之前的方法不行,想传递json对象怎么办呢? 使用下面这种方法, getA = function(){ var obj = {'projectId':123,'projectName':'aac ...

  9. PWA PSI statusingclient.UpdateStatus更新任务页面的AssnCustomFields的TextValue值

    1.注意Changesxml格式和下面一定要一样 2.CustomFieldGuid和CustomFieldName都不能少,自定义域的uid和name其中uid或者是MD_PROP_UID_SECO ...

  10. linux日常管理-screen

    假如一个任务要执行好几天,为了防止中途中断的情况, 在让后台运行的命令后面加一个 nohup会生成一个 .nohup.out文件,会搜集在运行过程中所产生的日志. 比直接后台运行任务的好处是,万一断电 ...