牛牛的Link Power I
牛牛的Link Power I
http://www.nowcoder.com/questionTerminal/7849602e35c2401e9435300a175f2a68
> 可以分析出第i个'1'可以产生的能量,是i - 1个'1'与前面产生的能量,加上i和i-1的距离乘于前面'1'的个数(因为前面每个'1'与第i个1的距离与第i - 1的距离相比都增加了i和i-1的距离)
#include<bits/stdc++.h> using namespace std; long long sum[200000]; long long s;//记录上个节点可以与前面节点形成多少ink能量 int n; char a[200000]; int ans;//记录离上个"1"的距离。 long long p = -1; long long SUM; const long long mood = 1e9 + 7; int main(){ cin >> n; cin >> a; for (int i = 0; i < n; i ++){ ans ++; if (a[i] == '1'){ p ++; sum[i] = s + p * ans;//记录当前节点可以与前面节点形成多少ink能量。 s = sum[i];//因为sum[i]最大也小于10^14,所以不用取模。 ans = 0; } } for (int i = 0; i < n; i ++) SUM +=sum[i], SUM %= mood; cout << SUM; return 0; }