1 second
256 megabytes
standard input
standard output
Iahub helps his grandfather at the farm. Today he must milk the cows. There are n cows sitting in a row, numbered from 1 to n from
left to right. Each cow is either facing to the left or facing to the right. When Iahub milks a cow, all the cows that see the current cow get scared and lose one unit of the quantity of milk that they can give. A cow facing left sees all the cows with lower
indices than her index, and a cow facing right sees all the cows with higher indices than her index. A cow that got scared once can get scared again (and lose one more unit of milk). A cow that has been milked once cannot get scared and lose any more milk.
You can assume that a cow never loses all the milk she can give (a cow gives an infinitely amount of milk).
Iahub can decide the order in which he milks the cows. But he must milk each cow exactly once. Iahub wants to lose as little milk as possible. Print the minimum amount of milk that is lost.
The first line contains an integer n (1 ≤ n ≤ 200000).
The second line contains n integers a1, a2,
..., an, where ai is 0 if
the cow number i is facing left, and 1 if it is facing right.
Print a single integer, the minimum amount of lost milk.
Please, do not write the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams
or the %I64dspecifier.
4 0 0 1 0
1
5 1 0 1 0 1
3
In the first sample Iahub milks the cows in the following order: cow 3, cow 4,
cow 2, cow 1. When he milks cow 3,
cow 4 loses 1 unit of milk. After that, no more milk is lost.
这题应该是一个模拟吧,从头到尾扫一遍(从左往右),把面朝右边的奶牛标记下来,没遇到一个就给res++,遇到面朝向左的奶牛,那么就把ans+=res,也就是说把这头奶牛前面的面朝右的奶牛对它的影响更新到答案中去。
代码:
# include<cstdio> # include<iostream> using namespace std; # define MAX 233333 typedef long long LL; int main(void) { int n; while ( cin>>n ) { LL res = 0; LL ans = 0; LL a = 0; for ( int i = 0;i < n;i++ ) { cin>>a; if ( a == 1 ) res++; else ans+=res; } cout<<ans<<endl; } return 0; }