首页 > 其他 > 详细

CodeForces-327A-Flipping Game

时间:2020-06-01 09:17:16      阅读:42      评论:0      收藏:0      [点我收藏+]

题意:

给出一个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

CodeForces-327A-Flipping Game

原文:https://www.cnblogs.com/OFSHK/p/13023319.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!