链接:
https://codeforces.com/contest/327/problem/A
题意:
一个01串,做一次在i到j的反转(0变1)(1变0)求最多几个1
输入
5
1 0 0 1 0
输出量
4
输入
4
1 0 0 1
输出量
4
解:
100*100双指针暴力
实际代码:
#include<iostream>
using namespace std;
int z[105];
int o[105];
int sz[105];
int main()
{
int Max=-1;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>sz[i];
if(sz[i]==1) o[i]=o[i-1]+1;
else o[i]=o[i-1];
if(sz[i]==0) z[i]=z[i-1]+1;
else z[i]=z[i-1];
}
/*
for(int i=1;i<=n;i++)
{
cout<<o[i]<<" "<<z[i]<<endl;
}
*/
int m1=o[n];
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
int temp1=(z[j]-z[i]);//这么多0,变1;
int temp2=o[j]-o[i];//这么多1,变0;
if(sz[i]==1) temp2++;
else temp1++;
//cout<<temp1<<endl;
//cout<<temp2<<endl;
int temp3=m1-temp2+temp1;
if(temp3>Max) Max=temp3;
}
}
cout<<Max<<endl;
}
限制:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output