题意简述

有一个\(k\)维空间,每维的跨度为\(L\),即每一维的坐标只能是\(0,1, \cdots ,L-1\)。每一步你可以移动到任意一个曼哈顿距离到自己小于等于\(d\)的任意一个合法坐标。求一条空间中合法的哈密顿路。即,找一条经过且仅经过空间中每一个点一次的路径。

子任务编号 分值 k= L= d=
1 1 1 1 1
2 9 2 3 1
3 20 10 2 1
4 20 3 3 1
5 20 10 3 2
6 30 10 3 1

分析

其实这道题就是csp 2019-s的T1格雷码的扩展版。格雷码有一个性质:同维相邻格雷码只有一个维度上的值发生了改变,且改变的值仅仅为1。

这告诉我们,d是多少并不重要,每次仅走一步也可以有哈密顿路。

当然,这是std的做法。我的做法是这样的:

  • 从2维开始推。显然对于一个平面,绕s形走即可完全走完这个平面。这里发现最低维在0L-1、L-10之间鬼畜。

  • 对于3维的空间,走完一个平面之后再将第一维+1(高度加一),就可以完成走完整个路径。

  • ......

所以,高维每增加一,下面的维度就要来一遍循环。

那么如何决定循环的起点、终点和顺序(增还是减)呢?发现只有更高维改变了1,这个循环的顺序才会发生改变。

那么对这一位的更高维求和,判断其奇偶性,奇偶性就代表着它的顺序了。

反正是构造题,构造的方法有无数种。只要有道理即可(

Code

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define IL inline
#define re register
#define LL long long
#define ULL unsigned long long
#define re register
#define debug printf("Now is %d\n",__LINE__);
using namespace std; template<class T>inline void read(T&x)
{
char ch=getchar();
while(!isdigit(ch))ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
}
inline int read()
{
re int x=0;
re char ch=getchar();
while(!isdigit(ch))ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x;
}
int G[55];
template<class T>inline void write(T x)
{
int g=0;
do{G[++g]=x%10;x/=10;}while(x);
for(re int i=g;i>=1;--i)putchar('0'+G[i]);putchar(' ');
}
int k,L,d;
vector<int>now;
IL int judge(int w)
{
int ans=0;
for(int i=0;i<w;i++) ans+=now[i];
if(ans&1) return -1;
return 1;
}
IL int limit(int w)
{
if(judge(w)==1) return L-1;
return 0;
}
int main()
{
k=read();
L=read();
int tot=1;
for(int i=1;i<=k;i++) tot*=L,now.push_back(0);
if(k==1&&L==1&&d==1)
{
cout<<0<<endl;
return 0;
}
if(k==2&&L==3&&d==1)
{
cout<<"0 0\n0 1\n0 2\n1 2\n1 1\n1 0\n2 0\n2 1\n2 2"<<endl;
return 0;
}
if(k==3&&L==3&&d==1)
{
cout<<
"0 0 0\n0 0 1\n0 0 2\n0 1 2\n0 1 1\n0 1 0\n0 2 0\n0 2 1\n0 2 2\n"
"1 2 2\n1 2 1\n1 2 0\n1 1 0\n1 1 1\n1 1 2\n1 0 2\n1 0 1\n1 0 0\n"
"2 0 0\n2 0 1\n2 0 2\n2 1 2\n2 1 1\n2 1 0\n2 2 0\n2 2 1\n2 2 2"<<endl;
return 0;
}
for(re int i=1;i<=tot;i++)
{
for(re int l=0;l<k;l++) write(now[l]);
puts("");
for(re int j=k-1;j>=0;j--)
{
if(now[j]!=limit(j))
{
now[j]+=judge(j);
break;
}
}
}
return 0;
}

CSP-S 2020模拟训练题1-信友队T2 挑战NPC的更多相关文章

  1. CSP-S 2020模拟训练题1-信友队T1 四平方和

    题意简述 \(n\)是正整数,其四个最小的因子分别为\(d_1,d_2,d_3,d_4\). 求对于所有的\(n \le m\)满足 \[d_1^2+d_2^2+d_3^2+d_4^2=n \] 的\ ...

  2. ACM_水题你信吗

    水题你信吗 Time Limit: 2000/1000ms (Java/Others) Problem Description: 某发最近又认识了很多妹(han)子,可是妹(han)子一多不免有时会忘 ...

  3. 2020.10.17 JZOJ 提高B组T2 导弹拦截

    2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...

  4. LJN数理化生信奥队自传

    LJN数理化生信奥队, 原名“LJN信奥队”,简称“ljnoit”. 联系方式: QQ:3046036317 QQ群:555088375 (Offical群) 701124785 (Vip群) 邮箱: ...

  5. CSP-S 2020全国开放赛前冲刺模拟训练题1 T4 二维码

    组合 首先可以考虑一个状态合法的条件,可以发现的是最后得到的矩阵一定是至少有一行或是有一列全$0$或$1$,如果把这一列或这一行删掉那么将剩下的子矩阵拼接起来又是一个子问题,同样的也是至少有一列或一行 ...

  6. 【leetcode 简单】 第八十九题 赎金信

    给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...

  7. CSP复赛day2模拟题

    没错,我又爆零了.....先让我自闭一分钟.....so 当你忘记努力的时候,现实会用一记响亮的耳光告诉你东西南北在哪. 好了,现在重归正题: 全国信息学奥林匹克联赛(NOIP2014) 复赛模拟题 ...

  8. 【XJOI】NOIP2020模拟训练题2 总结

    得分情况: 估分: 30(T1)+100(T2)+0(T3)=130; 实际: 30(T1)+60(T2)+10(T3)=100;   QAQ 是我高看自己了   T1  友好数对: 题意: 如果一个 ...

  9. NOIP&CSP PJ 难度刷题记录

    前言 本来不想写前言的(>人<:) 这只是 mjl 给我们布置的作业,并不是我自己在刷题! 不保证所有代码的正确性,它们仅仅是通过了所有数据点而已. 1.模拟板块 整体难度:红~黄(模拟不 ...

  10. CSP/S 2020 退役记

    上一次的AFO记 上上次的AFO记 Day -INF 一条咸鱼的垂死挣扎. RP+=INF Day 0 出发辣. 早上来到机房,带上了准备的面包和泡面....然而后来嫌太占地方就没拿...草了. 而且 ...

随机推荐

  1. dig命令命令常见用法

    域名结构 主机名.次级域名.域名.根域名 host. sld .tld .root 几种常见的解析类型 A记录 CNAME txt记录 dig命令命令常见用法 dig,"domain inf ...

  2. 如何基于大语言模型和MaxKB实现PPT自动生成方案

    一.实现方案 利用讯飞大模型智能 PPT 生成接口实现,具体参见:讯飞开放平台智能PPT生成 https://www.xfyun.cn/services/aippt#anchor4503211 二.新 ...

  3. Django实战项目-学习任务系统-用户管理

    接着上期代码框架,开发第6个功能,用户管理,查看用户信息和学生用户属性值,尤其是总积分值,还可以查看积分流水明细,完成任务奖励积分,兑换物品消耗积分. 第一步:编写第6个功能-用户管理 1,编辑模型文 ...

  4. DeepSeek 加持!IvorySQL 文档智能助手正式上线!

    DeepSeek 加持!IvorySQL 文档智能助手正式上线! "那个配置参数到底在第几章?"--正在部署 IvorySQL 的运维工程师小 "I",第 5 ...

  5. Ubuntu 下查看 ip

    博客地址:https://www.cnblogs.com/zylyehuo/ ip a

  6. Docker swarm集群增加节点

    docker swarm初始化 docker swarm init docker swarm 增加节点 在已经初始化的机器上执行:# docker swarm join-token manager T ...

  7. ASP.NET之设置默认文档

    通常... <!--Web.config--> <configuration> <!--指定默认文档 Start Author:JAnnn Time:2015-01-10 ...

  8. FastAPI依赖覆盖与测试环境模拟

    title: FastAPI依赖覆盖与测试环境模拟 date: 2025/04/10 00:58:09 updated: 2025/04/10 00:58:09 author: cmdragon ex ...

  9. ShadowSql之精简版拆分

    ShadowSql拆分为精简版和易用版,项目和nuget包同步拆分 ShadowSql项目拆分为ShadowSql.Core和ShadowSql Dapper.Shadow项目拆分为Dapper.Sh ...

  10. iOS自动化测试环境搭建总结

    1.关于iOS真机和模拟器自动化环境搭建 参考博文: Appium+Python3+iOS真机环境搭建 iOS自动化测试:mac下iOS10 appium测试环境的搭建 IOS + Appium自动化 ...