CodeChef TechFest 2013 Balancing nature(暴力)

题目链接:http://www.codechef.com/TCFST13/problems/TCFST06

我表示只能刷刷水题了~~

计算一个数组变成前面都负数后面都正数的最小操作个数。

枚举中间点就ok

代码如下

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 
 6 int n, a[500100], ans, na, pos, lna, lpos, lans;
 7 
 8 int main()
 9 {
10 //    freopen("in.txt", "r", stdin);
11 
12     while(cin >> n)
13     {
14         ans = 0;
15         na = 0, pos = 0;
16         for(int i=0; i<n; i++){
17             scanf("%d", &a[i]);
18 
19             if(a[i]==0)ans++;
20             if(a[i]<0)na++;
21             if(a[i]>0)pos++;
22         }
23         lna = 0, lpos = 0, lans = n-pos-ans;
24         for(int i=0; i<n; i++){
25             if(a[i]==0)continue;
26             else if(a[i]<0) lna++;
27             else lpos++;
28             if(lpos+(na-lna)<lans)
29             lans = lpos+(na-lna);
30         }
31         ans+=lans;
32         printf("%d
", ans);
33     }
34     return 0;
35 }
View Code
奔跑吧!少年!趁着你还年轻
原文地址:https://www.cnblogs.com/shu-xiaohao/p/3390429.html