码迷,mamicode.com
首页 > 其他好文 > 详细

2018.7.23模拟考试

时间:2018-07-23 15:54:05      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:main   family   矩阵   exe   etc   out   .exe   namespace   style   

天我居然A了一道题???怕不是把明年的运气都用光了

T1 题意简述:给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和。

             n<=2000,m<=50000

   解题思路:这道题其实最主要的是这个...每个测试点时限6秒

             这告诉我们...暴力就能过...

             当然也不能随便暴力。二维前缀和即可。复杂度O(nm)。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<ctime>
#define ll long long
using namespace std;
ll n,m;
ll ans,suma[2010][2010],sumb[2010][2010];
ll read()
{
    ll f=1;ll x=0;char s=getchar();
    while(s<0||s>9){if(s==-)f=-1;s=getchar();}
    while(s>=0&&s<=9){x=x*10+s-0;s=getchar();}
    x*=f;return x;
}
int main()
{
//    system("CreatRand.exe");
    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);
//    ll st=clock();
    n=read(),m=read();
    for(ll i=1;i<=n;i++)
        for(ll j=1;j<=n;j++)
            suma[i][j]=read(),suma[i][j]+=suma[i-1][j];
    for(ll i=1;i<=n;i++)
        for(ll j=1;j<=n;j++)
            sumb[i][j]=read(),sumb[i][j]+=sumb[i][j-1];
    for(ll i=1;i<=m;i++)
    {
        ans=0;
        ll xa=read(),ya=read(),xb=read(),yb=read();
        if(xa>xb) swap(xa,xb);
        if(ya>yb) swap(ya,yb);
        for(ll i=1;i<=n;i++)
            ans+=(suma[xb][i]-suma[xa-1][i])*(sumb[i][yb]-sumb[i][ya-1]);
        printf("%lld\n",ans);
    }
//    ll ed=clock();
//    printf("%lld\n",ed-st);
    return 0;
}

 


 

T2 题意简述平面上有N个整数坐标点。如果将点(x0,y0)移动到(x1,y1)。则代价为它们之间的切比雪夫距离。求使得K个点在同一位置上最少需要的代价。

 

2018.7.23模拟考试

标签:main   family   矩阵   exe   etc   out   .exe   namespace   style   

原文地址:https://www.cnblogs.com/water-radish/p/9354902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!