牛牛的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;
}
全部评论

相关推荐

5 收藏 评论
分享
牛客网
牛客企业服务