/*
贪心 负数一定不取
枚举最高位是1 且答案取为0的 位置, 更新答案。
*/
#include<iostream>
#include<cstdio>
#include<cstring>#define ll long long
#define N 100010using namespace std;
int n;
ll a[N],ans,sum[N];
char s[N];ll read()
{ll x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}int main()
{freopen("maximum.in","r",stdin);freopen("maximum.out","w",stdout);scanf("%d",&n);for(int i=1; i<=n; i++){a[i]=read();sum[i]=sum[i-1];if(a[i]>0)sum[i]=sum[i-1]+a[i];}scanf("%s",s+1);ll c=0;for(int i=n; i>=1; i--)if(s[i]=='1'){ans=max(ans,c+sum[i-1]);c+=max(a[i],0LL);}ans=max(ans,c);printf("%I64d\n",ans);return 0;
}

/*
15暴力
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>#define N 1010using namespace std;
int n,k;
int l,r,mid;
int num[N],tmp[N];
int ans;int minn(int a,int b,int i)
{if(a<b) return tmp[i-1];else return tmp[i-1]+mid;
}bool check()
{int sum=0;for(int i=1; i<=n; i++)    tmp[i]=num[i];for(int i=2; i<=n; i++)if(abs(tmp[i]-tmp[i-1])>mid){if(tmp[i+1]>tmp[i]) tmp[i]=max(tmp[i],tmp[i-1]+mid);else tmp[i]=minn(abs(tmp[i-1]-tmp[i+1]),tmp[i-1]+mid-tmp[i+1],i);sum++;    }if(sum>k)    return false;else return true;
}int main()
{scanf("%d%d",&n,&k);for(int i=1; i<=n; i++)    scanf("%d",&num[i]);l=0;r=1000000000;while(l<=r){mid=(l+r)/2;if(check())    ans=mid,r=mid-1;else l=mid+1;}printf("%d",ans);
}

不会分块

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
const int maxn = 200000;
const int len = 400;
int n, A, B,m;
int a[maxn],b[maxn],l[maxn],r[maxn],lb[maxn],tot;
int answer[300][300];
int rt[300][maxn], lt[300][maxn],d[maxn];
//int root[maxn*len], ll[maxn*len], rr[maxn*len],data[maxn*len];
int find(int x)
{for (int l = 0, r = m; l < r;){int mid = (l + r) / 2;if (b[mid] == x) return mid;if (b[mid]>x) r = mid;else l = mid + 1;}return -1;
}
/*int build(int l, int r)
{if (l == r){tot++;ll[tot] = rr[tot] = 0;data[tot] = d[l];return tot;}tot++;int tmp = tot;ll[tmp] = build(l, (l + r) / 2);rr[tmp] = build((l + r) / 2 + 1, r);data[tmp] = min(data[ll[tmp]], data[rr[tmp]]);return tmp;
}
int change(int i, int l, int r,int x)
{if (l == x && r == x){tot++;ll[tot] = rr[tot] = 0;data[tot] = n + 1;return tot;}tot++;int tmp = tot;ll[tot] = ll[i];rr[tot] = rr[i];if (l <= x && x <= (l + r) / 2) ll[tmp] = change(ll[i], l, (l + r) / 2, x);else rr[tmp] = change(rr[i], (l + r) / 2 + 1, r, x);data[tmp] = min(data[ll[tmp]], data[rr[tmp]]);return tmp;
}
int check(int i, int l, int r, int x, int &ans)
{if (l > x) return 0;if (1 <= l && r <= x){ans = min(ans, data[i]); return 0;}check(ll[i], l, (l + r) / 2, x, ans);check(rr[i], (l + r) / 2 + 1, r, x, ans);return 0;
}*/
int main()
{double ti = clock();freopen("sequence.in", "r", stdin);freopen("sequence.out", "w", stdout);scanf("%d%d%d", &n, &A, &B);a[0] = 0;for (int i = 1; i <= n; i++){char c;for (scanf(" %c", &c); c != 'A' && c != 'B'; scanf(" %c", &c));if (c == 'A') a[i] = a[i - 1] + B;else a[i] = a[i - 1] - A;}for (int i = 0; i <= n; i++) b[i] = a[i];sort(b, b + n + 1);m = unique(b, b + n + 1) - b;for (int i = 0; i <= n; i++){a[i] = find(a[i]);if (a[i] == -1){printf("???\n");return 0;}}n++;int k = n / len;for (int i = 0; i <= k; i++){int ans = 0;tot++;for (int j = i*len; j < n; j++){if (j%len == 0){answer[i][j / len] = ans;}if (lb[a[j]] != tot){lb[a[j]] = tot;l[a[j]] = j;}ans = max(ans, j - l[a[j]]);}}for (int i = 0; i < n; i++) r[i] = -1;for (int i = 0; i < n; i++){r[a[i]] = i;if (i%len == len - 1){int tmp = i / len;for (int j = 0; j < n; j++)rt[tmp][j] = r[j];}}for (int i = 0; i < n; i++) l[i] = -1;for (int i = n - 1; i >= 0; i--){l[a[i]] = i;if (i%len == 0){int tmp = i / len;for (int j = 0; j < n; j++)lt[tmp][j] = l[j];}}int q;scanf("%d", &q);int ans = 0;for (; q; q--){int L, R;scanf("%d%d", &L, &R);L--;int kl = L / len, kr = R / len;ans = 0;if (kl == kr){tot++;for (int i = L; i <= R; i++){if (lb[a[i]] != tot){lb[a[i]] = tot;l[a[i]] = i;}ans = max(ans, i - l[a[i]]);}}else{ans = answer[kl + 1][kr];tot++;int tmp = min(n, (kl + 1)*len);for (int i = L; i < tmp; i++){if (lb[a[i]] != tot){lb[a[i]] = tot;l[a[i]] = i;ans = max(ans, rt[kr - 1][a[i]] - i);}}tmp = min(R + 1, n);for (int i = kr*len; i < tmp; i++){if (lb[a[i]] != tot){if (lt[kl + 1][a[i]] != -1) ans = max(ans, i - lt[kl + 1][a[i]]);}else ans = max(ans, i - l[a[i]]);}}printf("%d\n", ans);}/*int q;for (scanf("%d", &q); q; q--){// if (q % 5000 == 0) cerr << q << endl;int L, R;tot++;scanf("%d%d", &L, &R);int ans = 0;for (int i = L - 1; i <= R; i++){if (lb[a[i]] != tot){lb[a[i]] = tot;l[a[i]] = i;}ans = max(ans, i - l[a[i]]);}printf("%d\n", ans);}*//*for (int i = 0; i <= n; i++){if (lb[a[i]] == 0){lb[a[i]] = 1;l[a[i]] = i;d[i] = n + 1;}else{r[l[a[i]]] = i;d[i] = i - l[a[i]];l[a[i]] = i;}}root[0] = build(1, n);for (int i = 1; i <= n; i++){if (r[i-1] != 0) root[i] = change(root[i - 1], 1, n, r[i-1]);else root[i] = root[i - 1];}int q;for (scanf("%d", &q); q; q--){int L, R;scanf("%d%d", &L, &R);L--;int ans = n + 1;check(root[L], 1, n, R, ans);if (ans == n + 1) printf("-1\n"); else printf("%d\n", ans);}*//* int q;int tans = 0;for (scanf("%d", &q); q; q--){int L, R;scanf("%d%d", &L, &R);L--;tot++;int ans = n + 1;for (int i = L; i <= R; i++){if (lb[a[i]] != tot){lb[a[i]] = tot;l[a[i]] = i;}else{ans = min(ans, i - l[a[i]]);l[a[i]] = i;}}if (ans == n + 1) printf("-1\n"); else  {printf("%d\n", ans);tans = max(tans, ans);}}cerr << clock()-ti << " "<<tans<<" "<<A<<" "<<B<<endl;*/return 0;
}

std

转载于:https://www.cnblogs.com/L-Memory/p/7774613.html

清北考前刷题day6下午好相关推荐

  1. 2017 清北济南考前刷题Day 7 afternoon

    期望得分:100+100+30=230 实际得分:100+100+30=230 1. 三向城 题目描述 三向城是一个巨大的城市,之所以叫这个名字,是因为城市中遍布着数不尽的三岔路口.(来自取名力为0的 ...

  2. 2017 清北济南考前刷题Day 2 afternoon

    期望得分:100+60+70=230 实际得分:0+60+0=60 T1 可以证明如果一对括号原本就匹配,那么这对括号在最优解中一定不会被分开 所以用栈记录下没有匹配的括号 最后栈中一定是 一堆右括号 ...

  3. HDLBits刷题Day6

    2.3.6 Adder1 问题陈述 您将获得一个add16执行 16 位加法的模块.实例化其中两个以创建一个 32 位加法器.一个 add16 模块计算加法结果的低 16 位,而第二个 add16 模 ...

  4. 17.4.28 清北第一天水题

    多重背包 (backpack.cpp/c/pas) (1s/256M) 题目描述 提供一个背包,它最多能负载重量为W的物品. 现在给出N种物品:对于第i类物品,一共有Ci件物品:对于每一件物品,重量为 ...

  5. 清北学堂第一题 游乐园 SmartOJ 1815(二分查找的精髓)

    本人原创日志,允许转载,但请注明出处,谢谢! 题目描述 游乐园里新推出一个游戏--飞机驾驶体验.有N-1个小朋友来玩这个游戏,他们排成长长的一列.这个游戏一共有M架"飞机"可供驾驶 ...

  6. 线上即可完成考试+刷题+练习等功能的考试系统源码

    线上考试系统得到企事业.学校.培训机构.医疗.银行等各行各业广泛应用,通过在线考试系统源码快速搭建企业自己的考试系统.考试系统包含题库建设.组卷设计.考试设计.题库训练.成绩批阅.错题分析.在线监考. ...

  7. day6 AI面试刷题

    day6 AI面试刷题 1. 什么是集成学习算法? 2. 集成学习主要有哪几种框架, 并简述它们的工作过程? 3. Boosting算法有哪两类,它们之间的区别是什么? 4. 什么是偏差和方差? 5. ...

  8. 二级python 刷题就能过吗_Python 刷题笔记:这很不python,官方大大能改下吗?

    惊讶:数值相等的整数或浮点数作为dict 字典的键将指向同一项?! 1.刷题遇到知识盲区 今天继续在 xue.cn 刷题,意外发现:整数和浮点数先后设为字典的键,会有奇怪的现象! 题目如下: What ...

  9. 【LeetCode 剑指offer刷题】树题19:8 二叉树中序遍历的下一个结点

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 8 二叉树中序遍历的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注 ...

最新文章

  1. python获取mac、计算机id_python 获取本机IP、mac地址、计算机名的简单示例
  2. 构建之法课后作业第二次作业第一题
  3. 95%PyTorch库都会中招的bug!特斯拉AI总监都没能幸免
  4. centos mysql密码设置密码_CentOS下设置MySQL的root密码
  5. Codeforces Round #355 (Div. 2) D. Vanya and Treasure dp+分块
  6. Java GregorianCalendar hashCode()方法与示例
  7. rstudio的数据集怎么建立和保存_这个40M的小工具助你在windows下处理数据如虎添翼...
  8. linux设置进程优先级工具,linux性能分析优化之基础指标参数(3) - 进程优先级 cpu nice priority NI PR %ni %nice...
  9. NTP实现联网校对时间详解
  10. risc-v 编译 linux,RISCV的linux模拟环境搭建整理和总结
  11. Android 关于display的几个问题
  12. STM32F103C8t6烧录问题
  13. 图神经网络学习过程心得总结
  14. 试题 算法训练 预测身高
  15. 先锋录音系统服务器,先锋音讯IP电话云录音系统——全球首创
  16. DR007利率报价查询_图表加数据DR007存款类机构质押式回购利率
  17. android 常用 jar包下载地址,android 常用库github网址
  18. Win10,Cuda 11.1 下载与安装
  19. FRM计算器使用流程你知道吗?
  20. 不租服务器,自建个人商业网站(5)

热门文章

  1. failed to load kernel library!处理办法
  2. 随意取消和恢复一键备份功能
  3. 公差基本偏差代号_508/f7:基本偏差怎么查,标准公差又怎么查?
  4. python数据分类方法_Python数据挖掘—分类—贝叶斯分类
  5. tum数据集_数值预报尚能战否?来自数据驱动的挑战
  6. 消息中间件kafka概述和安装
  7. ElasticSearch基于REST风格APi的常用操作
  8. .net mysql操作类_ASP.NET数据库操作类实例
  9. Python机器学习:线型回归法06最好的衡量线型回归法的指标RSquared
  10. php-fpm哪里下载_如何在centos系统下找到php-fpm的位置 - 翟码农技术博客