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\n", ans);
33     }
34     return 0;
35 }
View Code

 

posted @ 2013-10-27 01:22  张小豪  阅读(255)  评论(2编辑  收藏  举报