HDU 6205 card card card ( 思维 )
题意 : 给定两个序列 a 和 b ,保证 a 数列的和 == b数列的和,从头到尾考虑 (a[i] - b[i]) 的前缀和,直到前缀和为负数则无法进行下去,所得的便是a[1~i]的和,现在有一个操作,就是你可以将最前面的a[1] && b[1] 这两个数放到末尾去,问你最少经过多少次这样的操作能够使得去到的a[1~i]的的和是最大的
分析 : 发现因为有 a数列的和 == b数列的和,所以肯定有以某一个数开头使得将所有序列的数全部取完即 sum( a[1~末尾] ),我们先构造出 sub[i] = a[i] - b[i] 的序列,然后每一次选取一个正的sub[i] 作为开头来判断是否可行,如果在 i~k-1都可行,但是加上sub[k]就变得不可行,那么下一个开头就不是离 sub[i] 右边最近的一个正整数作为头,而是离 sub[k] 右边(当然最后一个元素的右边是第一个元素) 最近的一个正整数作为开头,为什么这样做呢?首先先如果按照第一种做法肯定是正确的,但是在时间上不是最优的,因为从 i~(k-1) 都是可行的,那么如果下一个开头的数还是在 i~(k-1) 这个序列里面考虑的话,那么下一次还是会在 k 这里停止,因为 sub[i] 是正数,细想就可以想明白了。模拟这个操作可以将数组复制一边粘到原数组末尾,但是这里我用了%操作,其实都一样。
#include<bits/stdc++.h>
using namespace std;
;
int n, a[maxn], b, sub[maxn];
inline int Scan()
{
, ch;
bool flag = false;
if((ch=getchar()) == '-') flag = true;
';
+ch-';
return flag?-res:res;
}
int main(void)
{
while(~scanf("%d", &n)){
; i<n; i++) a[i] = Scan();
;
; i<n; i++){
b = Scan();
sub[i] = a[i] - b;
) negative++;
}
"); continue; }///全都是负数的情况
, pos = ;
while(true){
bool ok = true;
) pos++;///从当前位置开始找到右边第一个正数
; !(j!=&&i==pos); j++, i=(i+)%n){///开始累加前缀和sum,j的作用是辅助判断i是否已经第二次到达了pos这个位置,也就是pos是满足题意的!
sum += sub[i];///累加前缀和
){///如果小于0,则在这里停止
ok = false;
pos = i;///记录一下当前位置
sum = ;///重置前缀和
break;
}
}
if(ok) break;
}
printf("%d\n", pos);
}
;
}
瞎 : 沈阳网络赛的题,靠队友带飞,学习队友代码orz
HDU 6205 card card card ( 思维 )的更多相关文章
- 【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心)
[BZOJ4391][Usaco2015 dec]High Card Low Card(贪心) 题面 BZOJ 题解 预处理前缀后缀的结果,中间找个地方合并就好了. #include<iostr ...
- 【题解】P3129高低卡(白金)High Card Low Card
[题解][P3129 USACO15DEC]高低卡(白金)High Card Low Card (Platinum) 考虑贪心. 枚举在第几局改变规则,在改变规则之前,尽量出比它大的最小的牌,在改变规 ...
- HDU 6187 Destroy Walls (思维,最大生成树)
HDU 6187 Destroy Walls (思维,最大生成树) Destroy Walls *Time Limit: 8000/4000 MS (Java/Others) Memory Limit ...
- hdu 6205 card card card 尺取法
card card card Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 2017ICPC沈阳网络赛 HDU 6205 -- card card card(最大子段和)
card card card Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 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 ...
- hdu 6205 card card card
https://vjudge.net/contest/184514#problem/L题意:排成一行的一堆牌,每堆牌都有一定数量的牌,然后每堆牌对应有一个惩罚值.一开始所有的牌都是正面向下的,并且在游 ...
- HDU 6205 (模拟) card card card
题目链接 Problem Description As a fan of Doudizhu, WYJ likes collecting playing cards very much. One day ...
- hdu 6205 card card card 最大子段和
#include<iostream> #include<deque> #include<memory.h> #include<stdio.h> #inc ...
随机推荐
- Jmeter JDBC请求---把数据库结果参数化传递到其他请求
摘要: 最近一个场景进行压力测试:生成商品id进行上下架和购买,记录写脚本的一个过程 1.在商品上架前需要准备商品ID,商品ID生成需要从数据库读取商品类别,从而生成商品ID,下面是从数据库:读取商品 ...
- FacertGrid()的使用
查看数据的前五行 tips = sns.load_dataset("tips") tips.head() 引入数据,布置横向画布 g = sns.FacetGrid(tips, c ...
- django F和Q 关键字使用
F 的使用: 想给表里每个价格加上一百就要用上F,直接加是不行的.
- Tomcat域名与服务器多对多配置
参考: https://www.cnblogs.com/yueshutong/p/9381566.html
- java int转Short
使用short(xx) problemMultipleChoiceDO.setExamCount((short)0);//在数据库中是smallint类型
- 通过编写串口助手工具学习MFC过程——(九)自动识别串口的方法
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 有十个div,怎样实现选中其中一个,改变其背景色,另外九个不变,当选中另一个时又改变另一个的背景色
这个是jq写的,可以自己下载一个js库,配上这个就可以了,里面的div可以用class控制,比如你10个div class为a1 也就是<div class="a1"> ...
- 移动前端不得不了解的Meta标签
http://ghmagical.com/article/page/id/PSeJR0rPd34k
- 网络爬虫之HTTPClient
HTTPClient官网:http://hc.apache.org/httpcomponents-client-4.5.x/quickstart.html 问题一:明明浏览器请求有数据,可使用HTTP ...
- 如何在github上部署自己的前端项目
很多时候我们想需要一个地址就可以访问自己的前端作品, 但是注册一个服务器和域名是需要花钱,很多小伙伴都不愿意, 其实这种前端静态页面github就可以帮我们预览其效果,而且只要在有网的情况下都可以访问 ...