给定由n个0或1或2组成的序列,我们把序列中从左至右(可不连续)存在的0、1、2称为012对,问在序列中有多少个012对。
解题核心思路:012对的问题可以这么看待,我们有个数组统计0,当遇到1的时候计算一次01对个数。当遇到2的时候计算一次012对个数。总共的个数 = 2前面有多少个01就有多少个012对,然后每个2的累加起来!
代码如下:
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int zerocount = 0;
long long int onecount = 0;
int temp;
long long int sum = 0;
for(int i=0;i<n;i++){
cin>>temp;
if(temp==0){
zerocount++;
}
else if(temp == 1){
onecount+=zerocount;
}
else{
sum += onecount;
}
}
cout<<sum<<endl;
return 0;
}