冬天
来源:互联网 发布:手机淘宝店铺红包链接 编辑:程序博客网 时间:2024/06/07 22:58
一、原题
题目描述
在远古时期,龙统治着大地,那时的气候非常暖和,气温从来没有低于0摄氏度。后来,龙灭绝了,温暖的气候也消失了。
现在的气候变得反复无常,已经没有了春夏秋冬轮流交替的规律了。冬天随时可能到来。我们规定如果某天的气温低于0度,就可以称它是冬天里一天。如果有连续T天,气温低于0度,则称这个冬天的周期是T。
人们总是谈论冬天就要来了,因为这容易引起不必要的恐慌。所以,政府规定,只能在一个周期为T的冬天到来之前的2T天之内谈论这个话题。有一个例外,最长的那个冬天,可以允许在它到来之前的3T天内谈论。可能有多个最长的冬天,那么只能选择其中的一个来实行3T的规则。现在,你知道未来每一天的气温,请找出最多有多少天,人们可以谈论冬天就要来了这个话题。
输入
第一行一个整数N(1<=N<=100000),表示总天数。
接下来一行包含N个整数,表示每天的气温,范围在[-100,100]内。
输出
一个整数,表示最大的天数。
样例输入
8
1 -1 4 3 8 -2 3 -3
样例输出
6
二、分析
这道题只是需要在一开始时记录一下最长的冬天,如果有多个,就记录下来,一个一个地尝试,就行了。具体的步骤见源代码的注释。
三、源代码
#include<cstdio>#include<iostream>using namespace std;int n,day[100005],win[100005],maxx,x,mx,s,sum;bool vis[100005];int main(){ //freopen("winter.in","r",stdin); //freopen("winter.out","w",stdout);//文件的读入输出 cin>>n; for(int i=1;i<=n;i++) cin>>day[i]; for(int i=n;i>=1;i--) if(day[i]<0) s++;//记录冬天的长度 else{//处理最大的天数 win[i+1]=s;//冬天断了 if(s>maxx) maxx=s;//保存天数最大值 s*=2; for(int j=i;j>=1&&s>0;j--,s--){ if(!vis[j]) sum++; vis[j]=1; } s=0; } for(int i=n;i>=1;i--) if(win[i]==maxx){ for(int j=i-2*win[i]-1;j>=1&&j>=i-3*win[i];j--)//尝试 if(!vis[j]) x++; if(x>mx)//保存答案 mx=x; x=0; } cout<<sum+mx;//输出答案}
四、测试数据
给几组测试数据吧。
winter1.in
7
38 65 75 -29 34 11 34
winter1.out
3
winter2.in
13
1 -39 -86 83 55 65 -13 3 92 -90 23 66 84
winter2.out
5
winter3.in
8
1 -1 4 3 8 -2 3 -3
winter3.out
6
0 0
- 冬天
- 冬天
- 冬天
- 冬天
- 冬天
- 冬天
- 冬天
- 冬天
- 冬天
- 冬天
- 冬天
- 主题冬天
- 北方冬天
- 感觉冬天
- 讨厌冬天
- 走出“冬天”
- 冬天到了
- 成都冬天
- eclipse building workspace 卡住
- 纯css实现Tab切换的两种方法
- ubuntu下的/var/cache/apt/archives文件夹;用apt-get命令下载的deb软件包
- MySQL存储过程
- iOS线程的同步异步问题
- 冬天
- 数据库Oracle与Mysql语法对比:变量赋值
- zTree插件和layer弹出层结合进行添加,删除,修改操作时,针对出现调用父父页面方法出现问题,解决方法
- mysql 免安装版本安装服务器
- CSS3:制作3D旋转导航综合练习题
- 在一个webview里跳转到新的activity里,webview无法响应js事件的问题
- Android Studio CMakeLists.txt文件配置
- RN1.学习记录开篇
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例