数字游戏【后缀积问题,一个数学分析问题】

此题着重考虑每加上一个数会对,前面得-+0产生什么样的影响。分析可知插入0为特殊点。然后就可以通过代码实现。

1 1 0 1 3 41 -1等模拟运行下就能法现其规律。


)V(YEBD2J[]QY)%6JFB30L8


  1 #include <algorithm>
  2 #include <iostream>
  3 #include <cstring>
  4 
  5 using namespace std;
  6 typedef long long LL;
  7 LL _1 = 0, _0 = 0, __1 = 0;
  8 LL cnt1, last, cnt2;
  9 
 10 void add(int num, int pos){
 11 
 12 	if(num == 0){
 13 		_0 += pos;
 14 		last = pos;
 15 		cnt1 = cnt2 = 0;
 16 		return;
 17 	}
 18 	if(num > 0){
 19 		_1 += (++cnt1), _0 += last, __1 += cnt2;
 20 		return;
 21 	}
 22 	_1 += cnt2, __1 +=  (++cnt1), _0 += last;
 23 	swap(cnt1, cnt2);
 24 }
 25 
 26 int main(){
 27 	int n, m;
 28 	cin >> n >> m;
 29 	int cnt = 0;
 30 	for(int i = 0; i < n; ++ i){
 31 		cnt++;
 32 		int num;
 33 		cin >> num;
 34 		add(num, cnt);
 35 	}
 36 
 37 	while(m--){
 38 		int op;
 39 		cin >> op;
 40 		if(op == 2) cout << _1 << " " << _0 << " " << __1 << endl;
 41 		else{
 42 			int t;
 43 			cin >> n;
 44 			for(int i = 0; i < n; ++ i){
 45 				int num;
 46 				cnt++;
 47 				cin >> num;
 48 				add(num, cnt);
 49 			}
 50 		}
 51 	}
 52 	return 0;
 53 
 54 }

猜你喜欢

转载自www.cnblogs.com/rstz/p/12399113.html