数字游戏【后缀积问题,一个数学分析问题】
此题着重考虑每加上一个数会对,前面得-+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