题意简述

有一个\(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. python 打开yaml文件提示Empty test suite.

    网上方案: 我自己: 将test改为其他名称开头即可 读取成功

  2. 【P5】Verilog搭建流水线MIPS-CPU

    课下 Thinking_Log 1.为何不允许直接转发功能部件的输出 直接转发会使一些组合逻辑部件增加新的长短不一的操作延迟,不利于计算设置流水线是时钟频率(保证流水线吞吐量?). 2.jal中将NP ...

  3. mysql安装以及2059 - Authentication plugin 'caching_sha2_password' cannot be loaded:报错的解决办法

    2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_ ...

  4. css 保留后端 textarea 中的换行与空格字符

    原文链接:https://blog.jijian.link/2020-10-22/css-pre/ 如果后台使用 textarea 输入内容,在前段显示需要保留换行符与空白字符,该如何做? 常规方法 ...

  5. MySQL查询建表规范

    因为之前一直再查找一些比较好的数据库规范,以方便在开发时连接 MySQL 进行查询/建表的时候,能根据规范来执行,达到提高 查询速度 / 执行 SQL 的性能 和提升 MySQL 的整体性能, 这里主 ...

  6. 【技术分析】EIP-7702 场景下 EOA 授权签名的安全探讨

    EIP-7702 在 2025 年即将到来的以太坊 Pectra 升级中,将会引入 EIP-7702 这个提案.其主要的内容就是使得 EOA 账户拥有了自己的 Storage ,并且可以通过 dele ...

  7. linux npm 全局安装 command not found

    前言 在 linux 使用 npm 全局安装一个模块时,会提示命令找不到. 例如:npm install @quasar/cli -g 后 $ quasar -v quasar: command no ...

  8. 【Python】词频统计

    需求:一篇文章,出现了哪些词?哪些词出现得最多? 英文文本词频统计 英文文本:Hamlet 分析词频 统计英文词频分为两步: 文本去噪及归一化 使用字典表达词频 代码: #CalHamletV1.py ...

  9. CDF与开源DevOps持续交付系统JenkinsX,Spinnaker,Tekton,Screwdriver

    什么是CDF 持续交付基金会(CDF)是许多快速增长的持续交付项目(包括Jenkins.Jenkins X.Spinnaker,Tekton和Screwdriver)的中立供应商.CDF通过开放模型. ...

  10. javaWeb之路径

    一. 路径写法: 1. 路径分类 a. 相对路径:通过相对路径不可以确定唯一资源 * 如:./index.html * 不以/开头,以.开头路径 * 规则:找到当前资源和目标资源之间的相对位置关系 * ...