Codeforces 835C Codeforces Round #427 (Div. 2)

来源:互联网 发布:淘宝客做群推还有用吗 编辑:程序博客网 时间:2024/06/03 21:41

星星可以重叠!!!(。。。。)开三维向量存储星星,因为时间以(c+1)循环,三维数组记录不同时刻的不同行前缀和。。。

#include<bits/stdc++.h>using namespace std;typedef long long LL;LL ans[12][105][105];vector<LL> sky[105][105];LL n,q,c;LL x,y,s;LL t0,x11,y11,x22,y22;int main(){    while(~scanf("%lld%lld%lld",&n,&q,&c))    {        memset(ans,0,sizeof(ans));        for(int i=0;i<101;i++)        {            for(int j=0;j<101;j++)            sky[i][j].clear();        }        for(int i=0;i<n;i++)        {            scanf("%lld%lld%lld",&x,&y,&s);            sky[x][y].push_back(s);        }        for(int k=0;k<=c;k++)        for(int i=1;i<=101;i++)        {            for(int j=1;j<=101;j++)            {                if(sky[i][j].size()>=1)                {                    LL pp=0;                    for(int mm=0;mm<sky[i][j].size();mm++)                    {                        if(sky[i][j][mm]==-1) continue;                        LL xixi=(sky[i][j][mm]+k)%(c+1);                        pp+=xixi;                    }                    ans[k][i][j]=ans[k][i][j-1]+pp;                }                else ans[k][i][j]=ans[k][i][j-1];            }        //  cout<<ans[k][i][100]<<endl;        }        for(int i=0;i<q;i++)        {            LL res=0;            scanf("%lld%lld%lld%lld%lld",&t0,&x11,&y11,&x22,&y22);            for(int j=x11;j<=x22;j++)            {                LL pp=t0%(c+1);                res+=ans[pp][j][y22]-ans[pp][j][y11-1];            }            cout<<res<<endl;        }    }}
原创粉丝点击