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 ...
随机推荐
- 【HANA系列】SAP HANA SQL获取当前日期加若干天后的日期
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取当前 ...
- kms自动激活Windows和Office
采用脚本激活 无毒无公害 下载后解压,然后双击运行即可自动激活 激活脚本点此下载
- 求一个集合S中m个元素的所有排列以及一个数组A的全排列—递归实现版完整代码
说明,本文全文代码均用dart语言实现. 求一个集合S中m个元素的所有排列情况,并打印,非常适合用递归的思路实现.本文给出了两种实现方法,一种是给定的填充排列数组长度是固定的,一种是可变长度的.两种方 ...
- 6.文件所有权和权限----免费设置匿名----Windows键盘记录器----简介和python模块
文件所有权和权限 touch --help cd Desktop mkdir Folder cd Folder clear touch Test1 Test2 Test3 Test4 ls ls -l ...
- 20191106 Spring Boot官方文档学习(1-2)
学习内容相关信息 最新版本:2.2.0 CURRENT GA 官网地址 官方文档地址 单页版文档地址 代码生成网址 2.入门 Spring Boot的主要目标是: 为所有Spring开发提供更快且入门 ...
- 只需要2个工具,百度云盘大文件就能用迅雷和IDM下载
不会代码,不懂脚本,没关系 ,能找到一座通往它们的桥梁,照样能到达彼岸. 这里以360极速浏览器为例. 在浏览器地址框输入以下地址直接到达浏览器安装扩展插件的地方(偷个懒,复制网址吧),https:/ ...
- C#方法名前的方括号
1.序列化:[Serializable]public void 方法名(){...} 2.WebServices方法:[WebMethod]public void 方法名(){...} 3.Ajax( ...
- centos6.9 安装mysql8
centos6.9 安装 mysql8 # 安装mysql8 1.下载https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.16-2.el6.x86 ...
- Tomcat进程、SFTP服务器
查看Tomcat是否以关闭 ps -ef|grep tomcat port sftp -oPort=60001 root@192.168.0.254
- Eclipse使用jdbc连接MySql数据库报:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
在使用eclipse连接mysql数据库时报异常: java.sql.SQLException: Access denied for user 'root'@'localhost' (using pa ...