HDU 6205 card card card【最长连续子串+尺取法】
2017-09-10 21:45
399 查看
题目链接
题意:n堆牌,每堆牌有个penalty value,刚开始可以把第一堆牌移到最后面,这个操作可以进行任意多次。然后从第一堆牌开始,每次加上这堆牌的数目减去这堆牌的penalty value,如果这个值小于0则取走到现在为止的所有牌,游戏结束。求刚开始时移第一堆的这个操作进行几次的时候可以拿走的牌最多。
其实就是一个变形版的最长连续子串,保证子串中每个前缀和都大于等于0,如果有一个小于0,这串就直接结束。此外,要保证子串的长度小于等于n。然后如果当前子串长度为n,就减去最开始那个看后面的加上后是否能满足,就是尺取法的思想。
题意:n堆牌,每堆牌有个penalty value,刚开始可以把第一堆牌移到最后面,这个操作可以进行任意多次。然后从第一堆牌开始,每次加上这堆牌的数目减去这堆牌的penalty value,如果这个值小于0则取走到现在为止的所有牌,游戏结束。求刚开始时移第一堆的这个操作进行几次的时候可以拿走的牌最多。
其实就是一个变形版的最长连续子串,保证子串中每个前缀和都大于等于0,如果有一个小于0,这串就直接结束。此外,要保证子串的长度小于等于n。然后如果当前子串长度为n,就减去最开始那个看后面的加上后是否能满足,就是尺取法的思想。
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n; int num[2000000+10]; int cha[2000000+10]; int main(){ // freopen("1.txt","r",stdin); while (scanf("%d",&n)!=EOF){ for (int i=1;i<=n;i++){ scanf("%d",&num[i]); } for (int i=1;i<=n;i++){ int x; scanf("%d",&x); cha[i]=num[i]-x; } for (int i=n+1;i<=2*n;i++){ num[i]=num[i-n]; cha[i]=cha[i-n]; } ll begin=1,len=0,sum=0; ll tmp=0; int i=1; int index=0; ll MAX=0; while (i<=2*n){ tmp+=cha[i]; sum+=num[i]; len++; // printf("%d %lld %lld %lld\n",i,tmp,sum,len); if (tmp<0){ if (sum>MAX){ MAX=sum; index=begin; } begin=i+1; sum=0; len=0; tmp=0; i++; continue; } else{ if (len==n){ if (sum>MAX){ MAX=sum; index=begin; } sum-=num[begin]; tmp-=cha[begin]; len--; begin++; } else{ if (sum>MAX){ MAX=sum; index=begin; } } i++; } } if (index>n){ index-=n; } index--; printf("%d\n",index); } }
相关文章推荐
- HDU 6205 card card card(尺取法)
- HDU 6205 card card card && 沈阳网络赛1012 (尺取法)
- HDU 3308 LCIS(线段树+区间合并+最长递增连续子串)
- hdu 1003 求最长连续子串和
- 【codeforces 676C】 【尺取法】【从一个ab序列中最多改变k个字符找到最长的连续a子串或者b子串长度】
- HDU--1238-Substrings(-最长连续子串)
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
- HDU 1003 Max Sum(最长连续子串和)
- hdu 6205 card card card(最大子段和)
- 求两个字符串的最长的连续公共子串
- 找出字符串中的最长连续数字子串
- HDU 3068 最长回文子串
- HDU 3308 线段树 最长连续上升子序列 单点更新 区间查询
- HDU 3068 最长回文子串
- HDU1540 Tunnel Warfare(线段树:维护最大连续子串)
- 求字符串中由连续的相同字符组成的最长子串(如果有两个及两个以上的最长子串,则输出第二个)
- 最长连续子串
- hdu 1159 最长公共子串 O(nm)dp算法
- HDU 3294 Girls' research【最长回文子串】