浏览器标题切换
浏览器标题切换end

CodeForces-327A-Flipping Game

题意:

给出一个01串,要求只能翻转一次区间(在翻转的区间内,0变成1,1变成0),问翻转后1的数量最大是多少。

 

思路:

如果全部都为0肯定全部翻转,如果全部为1肯定只翻转一次,所以默认max应该为-1而不是-inf;

算出一段区间内0和1的个数差值cnt,与后序数字进行比较,不断更新最大值maxx和cnt。

 

AC代码:

复制代码
 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<string.h>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<list>
 7 #include<map>
 8 #include<stack>
 9 #include<stdlib.h>
10 #include<vector>
11 #define eps 1e-9
12 #define read(x) scanf("%d",&x)
13 #define mem(a,b) memset(a,b,sizeof(a))
14 #define PI acos(-1)
15 #define F(a,b,c) for (int a=b;a<=c;a++)
16 #define RF(a,b,c) for (int a=b;a>=c;a--)
17 #define sc(a) scanf("%d",&a)
18 #define SC(n,m) scanf("%d %d",&n,&m)
19 #define pr(a) printf("%d\n",a)
20 using namespace std;
21 #define inf 0x3f3f3f3f
22 typedef long long ll;
23 
24 int a[110];
25 
26 int main()
27 {
28     int n;
29     cin>>n;
30     int sum=0,cnt=0,maxx=-1;
31     F(i,1,n)
32     {
33         int x;
34         cin>>x;
35         if(x==0)
36         {
37             cnt++;
38             maxx=max(maxx,cnt);
39         }
40         else
41         {
42             cnt--;
43             if(cnt<0)
44                 cnt=0;
45         }
46         if(cnt<maxx||!cnt)
47             sum+=x;
48     }
49     cout<<sum+maxx<<endl;
50     return 0;
51 }
View Code
复制代码

 

 

这个博客进行了时间上的优化:

https://www.cnblogs.com/mqxnongmin/p/10668455.html

posted @   抓水母的派大星  阅读(197)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示