数字游戏【后缀积问题,一个数学分析问题】
此题着重考虑每加上一个数会对,前面得-+0产生什么样的影响。分析可知插入0为特殊点。然后就可以通过代码实现。
1 1 0 1 3 41 -1等模拟运行下就能法现其规律。
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long LL;
LL _1 = 0, _0 = 0, __1 = 0;
LL cnt1, last, cnt2;
void add(int num, int pos){
if(num == 0){
_0 += pos;
last = pos;
cnt1 = cnt2 = 0;
return;
}
if(num > 0){
_1 += (++cnt1), _0 += last, __1 += cnt2;
return;
}
_1 += cnt2, __1 += (++cnt1), _0 += last;
swap(cnt1, cnt2);
}
int main(){
int n, m;
cin >> n >> m;
int cnt = 0;
for(int i = 0; i < n; ++ i){
cnt++;
int num;
cin >> num;
add(num, cnt);
}
while(m--){
int op;
cin >> op;
if(op == 2) cout << _1 << " " << _0 << " " << __1 << endl;
else{
int t;
cin >> n;
for(int i = 0; i < n; ++ i){
int num;
cnt++;
cin >> num;
add(num, cnt);
}
}
}
return 0;
} 相关推荐
xceman 2020-10-13
算法与数学之美 2020-10-07
Anscor 2020-10-05
liwg0 2020-09-08
数学爱好者 2020-08-31
thermodynamicB 2020-08-11
夕加加 2020-07-20
willowwgx 2020-07-18
kuoying 2020-07-16
Anscor 2020-07-14
starletkiss 2020-07-08
kingzone 2020-06-27
xceman 2020-06-27
算法与数学之美 2020-06-21
kuoying 2020-06-21
秒懂数学 2020-06-17
