题意:
给定一个n*n的螺旋矩阵,每个方格的权值为当前数字各位之和,现在给出m个宝殿的坐标。再给出q个询问,询问给出的矩形中宝典的权值之和
解析:
这道题最难的地方就是给定坐标求出螺旋矩阵对应的权值
给出对应代码,细节大家自己看
ll getval(ll x, ll y, ll n) {
ll t = min(min(x, y), min(n - x + 1, n - y + 1));
ll ta = 4 * (t - 1) * (n - t + 1);
if (x == n - t + 1) ta += n - t - y + 2;//在所在圈层的右侧边
else if (x == t) ta += 2 * n - 5 * t + y + 3;//左侧边
else if (y == t) ta += 2 * n - 3 * t - x + 3;//下侧边
else ta += 3 * n - 7 * t + x + 4;//上侧边
return ta;
}
第二个难点就在于N的范围太大,我们不能用二维数组来求前缀和(会炸空间),所以我们要给m个宝殿坐标和q个询问坐标进行离线处理。
对于求二维前缀和的问题,我们把s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]拆解成4个,用flag来标记哪些需要±
之后我们可以运用扫描线的方法,先按照x排序,然后对y进行映射,用树状数组维护映射后y上的值。用一条竖直的扫描线不断向右扫,遇到一个询问点就查询一次。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e6+10;
ll c[N*2],cnt;
ll ans[N];
ll t,n,m,p;
ll getval(ll x, ll y, ll n) {
ll t = min(min(x, y), min(n - x + 1, n - y + 1));
ll ta = 4 * (t - 1) * (n - t + 1);
if (x == n - t + 1) ta += n - t - y + 2;//在所在圈层的右侧边
else if (x == t) ta += 2 * n - 5 * t + y + 3;//左侧边
else if (y == t) ta += 2 * n - 3 * t - x + 3;//下侧边
else ta += 3 * n - 7 * t + x + 4;//上侧边
return ta;
}
struct node
{
ll x,y,flag,pos;
bool operator<(const node &W){
if(x!=W.x) return x<W.x;
if(y!=W.y) return y<W.y;
return pos<W.pos;
}
}a[N*2];
ll lowbit(ll x)
{
return x&(-x);
}
void add(int i,ll val,int n)
{
while(i<=n)
{
c[i]+=val;
i+=lowbit(i);
}
}
ll sum(int i,int n)
{
ll res=0;
while(i)
{
res+=c[i];
i-=lowbit(i);
}
return res;
}
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld %lld %lld",&n,&m,&p);
memset(c,0,sizeof c);
memset(ans,0,sizeof ans);
cnt=0;
for(int i=1;i<=m;i++)
{
ll x,y;
scanf("%lld %lld",&x,&y);
ll tmp=getval(x,y,n);
ll ans=0;
while(tmp)
{
ans+=tmp%10;
tmp/=10;
}
a[++cnt]={
x,y,ans,i};
}
for(int i=m+1;i<=m+p;i++)
{
ll x1,x2,y1,y2;
scanf("%lld %lld %lld %lld",&x1,&y1,&x2,&y2);
a[++cnt]={
x2,y2,1,i};
a[++cnt]={
x1-1,y2,-1,i};
a[++cnt]={
x2,y1-1,-1,i};
a[++cnt]={
x1-1,y1-1,1,i};
}
sort(a+1,a+1+cnt);
for(int i=1;i<=cnt;i++)
{
if(a[i].pos<=m) add(a[i].y,a[i].flag,n);
else
{
ans[a[i].pos-m]+=sum(a[i].y,n)*a[i].flag;
}
}
for(int i=1;i<=p;i++) printf("%lld\n",ans[i]);
}
}
文章浏览阅读5.9k次,点赞9次,收藏16次。解决了在simulink中使用s-function遇到的报错:State derivatives returned by S-function 'demo' in 'test/S-Function' during flag=1 call must be a real vector of length 2 _state derivatives returned by s-function 'pmsm' in 'ipmsm/ipmsm/s-function1
文章浏览阅读3.1k次。1. 打开配置文件Mac 如下图2. 在文件内部添加这段文字,就可以了:"update_check":false _mac sublime text 取消更新提示
文章浏览阅读548次,点赞10次,收藏6次。Linux系统下DNS配置指南_linux 服务器修改网络dns
文章浏览阅读779次,点赞19次,收藏24次。springboot微信小程序的小疾病问诊服务系统的设计与实现。springboot基于spring的物业管理系统的设计与实现。springboot基于Java的高校学生请假系统。ssm基于Android的购物商场APP设计与实现。springboot基于微信小程序的智慧校园系统。ssm基于Android的英语词典的设计与开发。ssm基于SSM+Vue的学生实践管理平台开发。ssm基于android的企业员工考勤系统。ssm基于web的暗香小店系统的设计与实现。ssm基于Web的高等学校公费医疗管理系统。
文章浏览阅读2.3w次,点赞15次,收藏63次。hover属性用不同的书写方式,来改变不同关系的元素样式。元素:hover 表示聚焦后改变自己元素:hover 元素 表示聚焦后改变其子元素元素:hover + 元素 表示聚焦后改变其指定的“亲兄弟”(条件是该兄弟元素与其相邻)元素元素:hover ~ 元素 表示聚焦后改变其指定的兄弟元素,两个元素相不相邻都行。示例:.first:hover {color: white;}/* 聚焦我改变自己 */.three:hover .three-son {font-size: 20px._css hover的用法
文章浏览阅读6k次,点赞3次,收藏15次。coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习1聚类算法clutering1聚类算法简介2K-means21kmeans的目标函数22随机初始化23选择类别数3考试quiz维数约减 dimensionality reduction1数据压缩2数据可视化3维度约简-主成分分析法PCA1 PCA_pca反向压缩
文章浏览阅读226次,点赞2次,收藏3次。本项目设计了一款可以触摸控制的天气显示器。主要由Wemos D1 Mini Pro和TFT显示屏组成,利用Wemos D1 Mini Pro作为设备的主控芯片,发出Wi-Fi信号并接收相应指令,通过调用API将接收到的信息传输到TFT显示屏,TFT显示屏将接收到的信息显示出来。该天气显示器实现对所在地区当前的时间与日期;当日的天气信息,如温度、压力、湿度、降雨量;七天的未来预测等功能的显示。设计采用Wemos D1 Mini Pro,利用API将实时获取的天气信息,通过TFT显示屏显示出来。_arduino wemos d1 mini
文章浏览阅读653次。public void initDiffDisplay() { try { DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); Display[] presentationDisplays = displayManager.getDisplays(); if (presentationDi._android service 检测是否双屏
文章浏览阅读530次,点赞23次,收藏10次。springboot+mybatisplus+mysql 用户端 uniapp(vue语法)管理后台 vue+elementUi。后台服务 springboot+mybatisplus+mysql。一、我们技术使用JAVA后台服务 前后端分离。管理后台 vue+elementUi。用户端 uniapp(vue语法)适配小程序+H5+公众号。私信客服获取演示地址。私信客服获取演示地址。
文章浏览阅读3.3k次,点赞3次,收藏5次。# -*- coding: UTF-8 -*-year = int(input("输入一个年份:"))if year % 100 == 0: if year % 400 == 0: print('%d年是闰年' % year) else: print('%d年不是闰年' % year)else: if year % 4 == 0: print('%d年是闰年' % year) else: print('%d_判断闰年的python程序直接输入一个代表年份的正整数
文章浏览阅读987次,点赞20次,收藏19次。偏微分方程PDE图像去噪(含SNR)完整的代码,方可运行;可提供运行操作视频!适合小白!_pdnet 深度学习 偏微分方程 去噪
文章浏览阅读6.6w次,点赞128次,收藏962次。Ubuntu18.0详尽版安装教程下载Ubuntu18.04下载VMware Workstation安装虚拟机下载Ubuntu18.04官方网站:http://old-releases.ubuntu.com/releases/18.04.4/?_ga=2.44113060.1243545826.1617173008-2055924693.1608557140下载VMware Workstation这个在网上有很多教程下载,这里我就不写了,我用的版本是14 pro。如下图:安装虚拟机1、打开_ubuntu18安装