【题解】鸡蛋

题目描述

  一天白雪公主来到超市为七个小矮人买鸡蛋,这里的鸡蛋都包装在篮子里,每个篮子的鸡蛋数都不相同。这些篮子排成一行,白雪公主要买其中连续的一段。不过为了每个小矮人分的鸡蛋数一样,有一个条件:这连续一段篮子的鸡蛋数的和要能被7整除。
  现在知道n个篮子的每一个里面鸡蛋数,问白雪公主有多少种购买方案?、

输入输出格式

输入格式

  第一行2个正整数:N,范围在[1,100000]。
  第二行N个正整数:范围在[1,100]。

输出格式

  一个整数。

输入输出样例

输入样例

5
8 6 2 7 9

输出样例

2

题解

  我们可以记录[1,i]这个区间mod7的值,然后用c数组记录这个值出现的次数,最后直接根据c求组合数即可,具体看下面程序。

#include <iostream>

#define MAX_N 100000

using namespace std;

int n;
int a[MAX_N + 5];
int c[7];
long long ans;

inline long long C(long long x)
{
    return x * (x + 1) >> 1;
}

int main()
{
    cin >> n;
    for(register int i = 1; i <= n; ++i)
    {
        cin >> a[i];
        a[i] = (a[i] + a[i - 1]) % 7;
        ++c[a[i]];
    }
    for(register int i = 0; i < 7; ++i) 
    {
        ans += C(c[i] - (i > 0));
    }
    cout << ans;
    return 0;
}
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10500371.html