HDU-6052 card card card(尺取法)
来源:互联网 发布:c语言求最大公因数函数 编辑:程序博客网 时间:2024/06/05 21:23
点我看题
题意:仔细读题诶…
分析:对于这种序列的问题,我们首先就会想到去扩展这个序列,然后利用尺取
怎么尺取???
想说的就是这个问题,先记录两个和,一个是ai的前i项和sum1,另一个是ai-bi的前i项和sum2,其实这么说还不是很准确,记录的是从第一个或者sum2<0后面的那一个到目前为止的和
记录从第一个开始的到当前为止的和当然很好理解,但是后面那个怎么说呢,当时比赛的时候就是卡在这里了,后来仔细想想,就算当我们算到当前的时候sum2<0且前面存在ak-bk<0的,他对后面产生的也是正面影响emmmm,真的是卡在这里了,所以下一次只要把当前的下一位当成第一位就好了啊。
写这篇博客单纯的想给自己一个教训吧,比赛的时候太过于浮躁了,感觉没有协调的配合好。
参考代码:
#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<iostream>using namespace std;typedef long long LL;const int maxn = 1e6+10;int n;int a[maxn*2],b[maxn*2];int main(){ while( ~scanf("%d",&n)) { for( int i = 0; i < n; i++) { scanf("%d",&a[i]); a[i+n] = a[i]; } for( int i = 0; i < n; i++) { scanf("%d",&b[i]); b[i+n] = b[i]; } int pos = -1; int maxs = 0; int sum1 = 0, sum2 = 0; int tmp = 0; for( int i = 0; i < 2*n; i++) { sum1 += a[i]; sum2 += (a[i]-b[i]); tmp++; if( tmp >= n) { maxs = sum1; pos = i-tmp+1; break; } if( sum2 < 0) { if( sum1 > maxs) { maxs = sum1; pos = i; } if( i > n) break; sum1 = sum2 = tmp = 0; } } printf("%d\n",pos); } return 0;}
阅读全文
0 0
- HDU-6052 card card card(尺取法)
- HDU 6205 card card card(尺取法)
- hdu 6205 card card card (尺取法)
- hdu6205 card card card 尺取法
- 【HDU 6205】 card card card 【尺取】
- HDU 6205 card card card(尺取)
- HDU 6205 card card card【最长连续子串+尺取法】
- HDU 6205 card card card && 沈阳网络赛1012 (尺取法)
- hdu 6205 card card card
- HDU 6205:card card card
- HDU 6205 card card card
- hdu 6205 card card card
- card card card HDU-6205
- HDU 6205 card card card
- card
- Card
- HDU 6205 card card card(展开字符串思想+思维)
- hdu 6205 card card card(最大子段和)
- HDU 5036 Explosion
- XML在Eclipse中报"Stream not available"警告
- linux ubuntu中boot无存储空间解决办法
- bzoj 2150: 部落战争 最小路径覆盖的做法+证明。
- MySQL数据库安装与配置详解
- HDU-6052 card card card(尺取法)
- C语言用法之extern
- 关于script的书写位置
- 64. Minimum Path Sum
- 习题 7.4 写一个函数,使给定的一个3*3的二维整形数组转置,即行列互换。
- 谷歌三大核心技术(二)Google MapReduce中文版
- jdk源码一 基本类型缓存
- 最全Pycharm教程(6)——将Pycharm作为Vim编辑器使用
- pymysql中connections.py编码设置导致中文显示乱码