Exact Neighbours (Medium)

news/2024/10/6 1:01:31/文章来源:https://www.cnblogs.com/dingxingdi/p/18288492

官解的方法二就是这篇博客(注意要先将\(a\)从小到大排序),补充一下,博客中说当\(a_j-j+1<0\)时,我们就找第\(j-a_j\)列的那个房子即可

我在做的时候,也想到了逐个构造的方法,然而我在构造新的一列时,却总是想让这一列的房子与前一列的房子来配对,事实证明,我们构造的时候不要拘泥于数学归纳法,可以从强数学归纳的思想出发,去找前面所有构造好了的房子

官解的方法一没有看懂英文是啥意思

我的方法与上述两种方法都不同:

显然\(1\)号房子是最特殊的,所以我们将其放在\((1,1)\),然后我们采用逐个构造法,发现如果存在两个\(a\)相同的房子就不太好构造,于是我们将相同的房子两两配对,并且从最后一列依次往前面放(显然合法),最后剩下的还没有配对的房子的\(a\)都不同,于是尝试将其与\(1\)号房子配对,注意此时第二列的距离可以放\(1\)\(n\),第三列的距离可以放\(2\)\(n\),依次类推,于是我们将剩下的房子排序,显然从小到大依次放置就合法;具体见以下代码,非常easy

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
const ll mod=998244353;
int n;
bool mark[N];
struct node
{int id,a;//id表示房子的编号,a如题目所述 
}t[N];
struct Node
{int x,y,to;//(x,y)是房子的坐标,to是与其配对的房子编号 
}ans[N];
bool cmp(node i,node j)
{if(i.a==j.a) return i.id<j.id;return i.a<j.a;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) {t[i].id=i;scanf("%d",&t[i].a);}sort(t+1,t+n+1,cmp);for(int i=2,last=n;i<=n;i++)//last表示最后的还没有放置房子的列,我们从后往前依次放置 if(t[i].a==0)//注意0的单独放置一列就好了 {ans[t[i].id].x=last--,ans[t[i].id].y=1;ans[t[i].id].to=t[i].id;mark[i]=1;}else if(t[i].a==t[i-1].a){ans[t[i].id].x=last--,ans[t[i].id].y=1;ans[t[i-1].id].x=last--,ans[t[i-1].id].y=t[i].a;ans[t[i].id].to=t[i-1].id,ans[t[i-1].id].to=t[i].id;mark[i]=mark[i-1]=1;i++;}ans[1].x=ans[1].y=ans[1].to=1;for(int i=2,last=2;i<=n;i++)if(!mark[i]){ans[t[i].id].x=last++,ans[t[i].id].y=t[i].a-ans[t[i].id].x+2;ans[t[i].id].to=1;}puts("YES");for(int i=1;i<=n;i++)printf("%d %d\n",ans[i].x,ans[i].y);for(int i=1;i<=n;i++) printf("%d ",ans[i].to);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739775.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24-暑假软件工程日报(7_7)

工作时间:7月7日 14:00-17:00 工作内容: 基本完成第二阶段大程序构建 代码:#include <cstring> #include <iostream> #include <list> #include <math.h> #include <queue> #include <stack> #include <stdio.h> #include <st…

[CISCN2019 华北赛区 Day2 Web1]Hack World

进入题目 输入数字1数字20对select 空格 union or 等等测试发现没有过滤select 空格也被过滤 注意不能单独测试用亦或运算 1^0为真 尝试0^if((ascii(substr((select(flag)from(flag)),1,1))=100),0,1) 回显正常根据回显判断正误 编写脚本爆破,由于该网站请求太快会报429,请求…

CubeMx的部分配置显示不出来

现象描述:CubeMx的部分配置显示不出来 处理方法:(1)继续进行其他配置,给工程起名字,并生成代码;(2)关闭CubeMx后再次打开

[CISCN2019 华东南赛区]Double Secret

进入题目由于请求不能过快,目录扫描工具失效可写脚本, 根据题目两个secret,猜测有serect目录 访问猜测还有一个secret参数随意输入发现源码泄露 注意到有flask,考虑python模板注入 注意到发现rc4加密 找师傅的加密脚本 import base64 from urllib.parse import quote def rc4…

[CISCN2019 华东南赛区]Web11

进入题目注意到xff 在url处随意输入目录xff随之变化 注意下放smarty是php模板 猜测xff为模板注入点 如下用if标签看到回显得到flag flag{6efda977-94fb-4d30-8668-fe28458ec2bf}

game1

进入题目发现是一个游戏发现有一个score.php的发包 发现有分数等 对比不同分数的包发现sign值都有ZM后疑似为base64于是将分数改为较高的分,ZM+base64 尝试要补一个=得到flag

[CISCN 2019 初赛]Love Math

进入题目,直接源码 代码审计、看师傅wp有黑名单字符过滤,有白名单函数过滤 于是用编码绕过,利用eval函数执行命令,system(cat /flag.txt) base_convert(a,b,c) //将数值a按b进制转换为c进制 dechex //将10进制转成16进制 hex2bin() //16进制转成字符串 base_convert(37907…

babyweb国赛华东北

进入题目目录扫描 扫出ssrf.php 发现url尝试用file协议访问/flag.txt拿到flag

人脸识别签到系统一站式开发【基于Pyqt5的CS架构软件】

人脸识别签到系统:课堂签到,上班打卡,进出门身份验证。 功能:人脸录入,打卡签到,声音提醒,打卡信息导出,打包exe文件人脸识别签到系统 1、运用场景 课堂签到,上班打卡,进出门身份验证。 2、功能架构 人脸录入,打卡签到,声音提醒,打卡信息导出:3、技术栈 python3.8…

本地管理员

进入题目 随意输入密码发现提示ip,则尝试xff伪造ip右键检查发现base64编码 解码得猜测为用户admin密码 抓包发包得到flag

rust学习-记录第一个完成的rust算法题

给你一个下标从 0 开始的 8 x 8 网格 board ,其中 board[r][c] 表示游戏棋盘上的格子 (r, c) 。棋盘上空格用 . 表示,白色格子用 W 表示,黑色格子用 B 表示。 游戏中每次操作步骤为:选择一个空格子,将它变成你正在执行的颜色(要么白色,要么黑色)。但是,合法 操作必须满…

Grafana+Loki+Promtail 日志监控

目录前置工作用户组(按需创建)GrafanaLokiLoki 配置文件Promtail配置文件配置数据源创建仪表盘添加查询项 前置工作Centos 7 关闭防火墙 (systemctl stop firewalld) 独立的用户组(可以不创建)用户组(按需创建) # 创建用户组 groupadd grafana # 新建一个家目录为`/home/graf…