TOJ 2236 Partial Sums 解题

TOJ 2236 Partial Sums 解题

组合数学问题
处理之前先对整个队列求一个和;
然后对每一个部分和统计一下
 1 #include  < stdio.h >
 2 #include  < string .h >
 3
 4 int  seq[ 100100 ];
 5 int  md[ 6000 ];
 6
 7 long   long  jx( long   long  x)  {
 8    return x*(x+1)/2;
 9}

10 int  main()  {
11    int n, l, u;
12    int i;
13    int sum, m;
14    long long res, now, best;
15
16    while(scanf("%d%d%d"&n, &l, &u)!=EOF) {
17        for(i=0; i<n; i++{
18            scanf("%d"&seq[i]);
19        }

20        best = (long long)-1;
21        for(m=l; m<=u; m++{
22            memset(md, 0sizeof(md));
23            md[0= 1;
24            sum = 0;
25            for(i=0; i<n; i++{
26                sum = (sum+seq[i])%m;
27                md[sum] ++;
28            }

29            now = 0;
30            for(i=0; i<m; i++{
31                now += jx((long long)(md[i]-1));
32            }

33            //printf("%d: %I64d\n", m, now);
34            if(now > best) {
35                best = now;
36                res = m;
37            }

38        }

39        printf("%d\n", res);
40    }

41    return 0;
42}

43
44

你可能感兴趣的:(TOJ 2236 Partial Sums 解题)