ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HDU 6336 找规律 容斥

2019-08-08 19:36:17  阅读:170  来源: 互联网

标签:HDU 21 42 ll 容斥 6336 include 方阵 define


通过观察可以发现,假设给的数组长度为l,如果l为奇数,那么ll的矩阵周期性出现,如果l为偶数,那么2l2l的方阵周期性出现,所以我们可以把2l * 2l的方阵存起来,然后写一个函数f,这个函数接受一个点,返回这个点与0,0点所代表的方阵中所有子元素的和,接下来只要运用容斥关系,把四个点扔进这个函数求值即可。

#include <iostream>
#include <math.h>
#include <iomanip>
#include <string>
#include <cstdio>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#define INF 0x3f3f3f3f
#define N 17
#define M 998244353
#define ll long long
using namespace std;
ll A[10];
ll map[42][42];
ll t,l,q;
ll cnt;
ll pre[21][21];
ll g[21];

ll sum(ll x,ll y){
    if(x == 0 || y == 0){
        return 0;
    }
    for(int i=1;i<=2*l;i++){
        g[i] = g[i-1] + pre[i][2*l] * (y/(2*l)) + pre[i][y%(2*l)];
    }
    return g[2*l] * (x/(2*l)) + g[x%(2*l)];
}


int main() {
    ll i,j;
    scanf("%lld",&t);
    while (t > 0)
    {
        t--;
        ll x1,y1,x2,y2;
        scanf("%lld",&l);
        for(i=0;i<l;i++){
            scanf("%lld",&A[i]);//从0开始
        }
        cnt = -1;
        for(i = 1;i<= 4*l;i++){
            for(j=1;j<=i;j++){
                cnt = (cnt+1)%l;
                map[j][i+1-j] = A[cnt];
            }
        }
        for(i=1;i<=2*l;i++){
            for(j=1;j<=2*l;j++){
                pre[i][j] = pre[i][j-1] + map[i][j];
            }
        }
        scanf("%lld",&q);
        for(i=1;i<=q;i++){
            scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
            //cout<<sum(x1-1,y1-1)<<endl;
            //cout<<sum(x2,y2)<<endl;
            y1++,x1++,y2++,x2++;
            ll ans = sum(x1-1,y1-1) + sum(x2,y2) - sum(x2,y1-1) - sum(x1-1,y2);
            printf("%lld\n",ans);
        }
    }
    
    return 0;
}

标签:HDU,21,42,ll,容斥,6336,include,方阵,define
来源: https://blog.csdn.net/qq_19275839/article/details/98883584

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有