https://vjudge.net/contest/184514#problem/L
题意:
排成一行的一堆牌,每堆牌都有一定数量的牌,然后每堆牌对应有一个惩罚值。一开始所有的牌都是正面向下的,并且在游戏开始之前可以把第一堆牌移到最后,这个操作可以进行若干次。在那之后,一个人开始依次拿起一堆牌,并且把它们全部正面朝上,之后需要把某些牌翻转到正面向下,翻转的数量就是这堆牌的惩罚值,之后把正面向上的牌翻转加到下一堆进行操作。当遇到当前的正面向上的牌小于当前的牌的惩罚值的时候,游戏结束,可以得到这堆牌以及之前的所有牌。
问需要挪多少堆到后面可以得到最大数量的牌。
思路:
一开始被题解误导,wa了6发。首先这题由于要挪到后面,而且有顺序,所以很自然的想到复制一份加到后面,形成一个环,这样方便许多。之后我们设置3个变量,一个表示当前取得的牌数num,一个表示当前减去惩罚值之后剩下的牌sum,一个记录当前取得堆的数量cnt。当cnt >= n的时候,就说明我们可以取到全部,也就是取到最多的了,记录位置并跳出。当sum < 0 的时候,就说明不能再取了,此时就更新num的值并记录此时的位置,将cnt和sum重置为0.循环完之后所求的num就是最大值。
当我们记录的位置ans最后要减去n,因为我们是讲题中所给的线拼成了一个环,所以位置会有偏移。
代码:
 #include <stdio.h>
#include <string.h> int a[];
int b[]; int main()
{
int n; while (scanf("%d",&n) != EOF)
{
for (int i = ;i <= n;i++)
{
scanf("%d",&a[i]);
a[i+n] = a[i];
} for (int i = ;i <= n;i++)
{
scanf("%d",&b[i]);
b[i+n] = b[i];
} long long pre = ;
long long sum = ;
long long num = ;
long long maxx = -1e12;
int ans = ;
int cnt = ; for (int i = ;i < * n;i++)
{
num += a[i]; sum = (pre + a[i] - b[i]); if (sum >= )
{
cnt++;
pre = sum;
}
else
{
if (num > maxx)
{
maxx = num;
ans = i;
} pre = ;
cnt = ;
} if (cnt >= n)
{
ans = i;
break;
}
} if (ans == n) printf("%d\n",);
else printf("%d\n",ans - n);
} return ;
}

hdu 6205 card card card的更多相关文章

  1. 【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心)

    [BZOJ4391][Usaco2015 dec]High Card Low Card(贪心) 题面 BZOJ 题解 预处理前缀后缀的结果,中间找个地方合并就好了. #include<iostr ...

  2. 【题解】P3129高低卡(白金)High Card Low Card

    [题解][P3129 USACO15DEC]高低卡(白金)High Card Low Card (Platinum) 考虑贪心. 枚举在第几局改变规则,在改变规则之前,尽量出比它大的最小的牌,在改变规 ...

  3. hdu 6205 card card card 尺取法

    card card card Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. 2017ICPC沈阳网络赛 HDU 6205 -- card card card(最大子段和)

    card card card Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  5. card card card HDU - 6205

    As a fan of Doudizhu, WYJ likes collecting playing cards very much. One day, MJF takes a stack of ca ...

  6. HDU 6205 (模拟) card card card

    题目链接 Problem Description As a fan of Doudizhu, WYJ likes collecting playing cards very much. One day ...

  7. hdu 6205 card card card 最大子段和

    #include<iostream> #include<deque> #include<memory.h> #include<stdio.h> #inc ...

  8. HDU 6205 card card card ( 思维 )

    题意 : 给定两个序列 a 和 b ,保证 a 数列的和 == b数列的和,从头到尾考虑 (a[i] - b[i]) 的前缀和,直到前缀和为负数则无法进行下去,所得的便是a[1~i]的和,现在有一个操 ...

  9. hdu 6205: card card card【输入挂】

    题目链接 感谢 http://blog.csdn.net/txgang/article/details/77568491 以下供参考 getchar读入法 2683MS FastIO法 MX=1e2 ...

随机推荐

  1. python学习-字符串前面添加u,r,b的含义

    引用:https://www.cnblogs.com/cq90/p/6959567.html u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unico ...

  2. 剑指Offer-孩子们的游戏(圆圈中最后剩下的数)

    package Other; import java.util.LinkedList; /** * 孩子们的游戏(圆圈中最后剩下的数) * 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友, ...

  3. Linux 绝对路径与相对路径

    根据文件名写法的不同,可将所谓的路径(path)定义为绝对路径(absolute)和相对路径(relative). 绝对路径:由根目录(/)开始写起的文件名或目录名称. 相对路径:相对于当前路径的文件 ...

  4. 【Java实现】栈和队列就是这么简单

    一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...

  5. JAVA-基础语法篇

    JAVA-基础语法篇 一.     基础语法: 对大小写敏感 类名的首字母大写 方法名首字母小写,后面用驼峰发命名 源文件名和类名要相同 主方法入口: public static void main( ...

  6. linux小白成长之路8————访问Docker中的mysql

    [内容指引] 本篇实战演示如何操作Docker中的mysql数据库,包含以下五个知识点: 登录容器: 登录mysql: 运行SQL指令创建数据库: 退出mysql: 退出容器: 1.登录容器 我们在上 ...

  7. C语言的第一次作业

    一.PTA实验作业 题目1. 温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验 ...

  8. 冲刺NO.11

    Alpha冲刺第十一天 站立式会议 项目进展 项目进入尾声,主要测设工作完成过半,项目总结也开始进行. 问题困难 项目的困难现阶段主要是测试过程中存在一些"盲点"很难发现或者发现后 ...

  9. 在Nginx上配置多个站点

    有时候你想在一台服务器上为不同的域名运行不同的站点.比如www.siteA.com作为博客,www.siteB.com作为论坛.你可以把两个域名的IP都解析到你的服务器上,但是没法在Nginx的根目录 ...

  10. PYTHON 词云

    #!/usr/bin/env python # -*- coding:utf-8 -*- import matplotlib.pyplot as plt from wordcloud import W ...