索思乐学

zyxjeek的博客

1. 题目描述

zky 有 \(n\) 个扑克牌,编号从 \(1\)\(n\),zky 把它排成一个序列,每次把最上方的扑克牌放在牌堆底,然后把下一张扑克牌拿出来输出,最终输出的序列恰好是从 \(1\)\(n\),faebdc 问你原序列是什么,因为 faebdc 神犇早已在 \(\mathcal O (1)\) 的时间得出结果,如果你在 1 s 内答不出来,faebdc 会吃了你。 对于 \(100\%\) 的数据,\(1 \le n \le {10}^6\)

原题链接:https://www.luogu.com.cn/problem/P2021

2. 思路

此题的数据范围为 \(10^6\),所以应该用 \(\mathcal O(n)\) 级别的算法来解决。一开始比较容易想到的是使用数学方法进行推导,但是似乎有点复杂。考虑使用队列进行模拟,队列中储存的是答案在数组中的下标,每次输出就将数组中对应下标的答案设为当前应输出的数字(1~n)。这样即可解决问题。

建立一个数组 \(C\),表示整个扑克牌序列,一个队列 \(Q\),用于模拟整个过程,其中每个成员 \(i\) 表示第 \(i\) 张扑克牌。将 \(cnt\) 初始赋值为 \(1\)。循环直到队列为空,每一次都将队首置于队尾,并取出第二个队首 \(k\),将 \(C_k\) 设为 \(cnt\),且递增 \(cnt\)。循环结束后顺次输出数组 \(C\) 即可。

3. 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

int n;
int c[1000005];
queue<int> q;

int main() {
cin >> n;
for (int i = 1; i <= n; i++)
q.push(i);
int cnt = 1;
while (!q.empty()) {
q.push(q.front());
q.pop();
c[q.front()] = cnt++;
q.pop();
}
for (int i = 1; i <= n; i++)
cout << c[i] << ' ';
return 0;
}

4. 复杂度分析

时间复杂度:\(\mathcal O(n)\)

空间复杂度:\(\mathcal O(n)\)


The END

好久没用Hexo写博客了,笔者准备寒假时更新一波洛谷的题解,但由于用命令行写博客很不方便,于是找到了Hexon这款图形化Hexo博客部署工具(

1. 安装

这一步很简单,在确保自己的Hexo安装正确后,执行以下命令即可

1
2
3
4
git clone https://github.com/gethexon/hexon --depth 1
cd hexon
pnpm install
pnpm run setup

此时要输入Hexo博客的路径,并设置用户名、密码。

2. 启动和使用

运行pnpm start,打开服务器,用输出消息中的用户名和你设置的密码(不要用你之前设的用户名,有bug)

进入主页后就可以新建管理文章和页面等等,可以一键部署/清理/生成,还可以在这里写文章,连md编辑器都省了。


其实笔者也刚刚开始使用这款工具,这条博客是测试用的,后续如果有什么更加有趣的玩法我会随时更新。


The END

py2exe是一个方便的工具,可以将Python程序转化为可以再Windows上直接运行的exe文件,适用于将Python程序分享给没有安装Python解释器用户。下面由我带大家了解一下py2exe的使用。

3.26日更新:推荐使用pyinstaller!!!

这两天笔者又发现了另一个python包,叫做pyinstaller,真的超好用。

安装:pip install pyinstaller

使用:pyinstaller --onefile main.py

众所周知,py2exe打包的程序需要带着dist文件夹一起执行,而pyinstaller直接提供了--onefile这一选项!打包后,dist文件夹里的exe可以单独使用,其余的文件可以直接删除!

而且,pyinstaller不需要编写setup.py,只需1个命令就可以搞定。

它的缺点是不能打包更复杂的程序,比如我曾经写的外星人游戏。但是新手时期的控制台程序完全可以用它搞定。

一、 安装py2exe

  1. 使用Win+R快捷键打开运行窗口,输入cmd,回车。

  1. 检查Python和pip版本(版本可能与我的不同,只要不报错就可以)

    1
    2
    3
    4
    5
    C:\Users\yixun>python --version
    Python 3.10.5

    C:\Users\yixun>pip --version
    pip 22.0.4 from C:\Users\yixun\AppData\Local\Programs\Python\Python310\lib\site-packages\pip (python 3.10)
  2. 安装py2exe:pip install py2exe

二、使用py2exe

  1. 首先将cmd切换到你的文件夹里,比如cd C:\Users\yixun\Desktop\Code。安装了Windows终端的读者也可以在文件夹里右击,然后这样:

  2. 创建一个测试用的Python程序,比如经典的废话程序“身高计算器”:

    1
    2
    print("你的身高是:" + input("请输入你的身高:"))
    input() #防止输出太快窗口直接关闭,建议每个要转成exe的程序都添加这一句话

    可以命名为main.py

  3. 接下来,创建一个新的Python程序,可以命名为setup.py

    1
    2
    3
    4
    5
    from distutils.core import setup
    import py2exe

    sys.argv.append('py2exe')
    setup(console=["main.py"]) # 与你的程序文件名匹配

    注意,所有命名都不是强制性的,可以随意更改。

  4. 双击运行setup.py

  5. 这会生成一个名叫dist的子目录,注意如果要把exe分享给别人,dist目录要一起分享。

  6. 打开dist目录中的main.exe,成功运行,最后按Enter可以退出程序。

如有疑问,请联系yixun2010@outlook.com


The END

1. 安装zsh,oh-my-zsh

  • 首先安装zsh:sudo apt install zsh

  • 然后安装oh-my-zsh:sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

2. 安装插件

  • 安装高亮插件:

    1
    2
    cd ~/.oh-my-zsh/custom/plugins/
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
  • 安装主题插件:git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

  • 将设置应用到.zshrc:

    1
    2
    3
    4
    5
    6
    ### ................ ###
    ZSH_THEME="powerlevel10k/powerlevel10k"
    ### ................ ###
    plugins = (git sudo zsh-syntax-highlighting)
    ### ................ ###
    source ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
0%