UVA 816 - Abbott‘s Revenge (Abbott的复仇) By SuCicada

例题6-14 Abbott的复仇(Abbott’s Revenge, ACM/ICPC World Finals 2000, UVa 816) 有一个最多包含9*9个交叉点的迷宫。输入起点、离开起点时的朝向和终点,求一条最 短路(多解时任意输出一个即可)。 图6-14 迷宫及走向 这个迷宫的特殊之处在于:进入一个交叉点 的方向(用NEWS这4个字母分别表示北东西 南,即上右左下)不同,允许出去的方向也不 同。例如,1 2 WLF NR ER 表示交叉点(1,2) (上数第1行,左数第2列)有3个路标(字 符“”只是结束标志),如果进入该交叉点时的 朝向为W(即朝左),则可以左转(L)或者直 行(F);如果进入时朝向为N或者E则只能右转 (R),如图6-14所示。 注意:初始状态是“刚刚离开入口”,所以即 使出口和入口重合,最短路也不为空。例如,图 6-14中的一条最短路为(3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1) (2,2) (1,2) (1,3) (2,3) (3,3)。 Sample Input SAMPLE 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF *...

SuCicada

UVA 839 - Not so Mobile (天平)By SuCicada

例题6-9 天平(Not so Mobile, UVa 839) 输入一个树状天平,根据力矩相等原则判断是否平衡。如图6-5所示,所谓力矩相等, 就是WlDl=WrDr,其中Wl和Wr分别为左右两边砝码的重量,D为距离。 采用递归(先序)方式输入:每个天平的格式为Wl,Dl,Wr,Dr,当Wl或Wr为0时,表 示该“砝码”实际是一个子天平,接下来会描述这个子天平。当Wl=Wr=0时,会先描述左子天 平,然后是右子天平。 样例输入: 1 0 2 0 4 0 3 0 1 1 1 1 1 2 4 4 2 1 6 3 2 Sample Output YES 【注意】 输出结果之间空一行 本家地址 递归走,一边输入每一结点,一边递归判断这个结点的左结点结果(左子树重量总和)和右结点结果(右子树重量总和)是否满足要求。 这样的话在建立树的时候也就直接计算结束了。 #include<iostream> using namespace std; int lair(){ int wl,dl,wr,dr; cin>>wl>>dl>>wr>>dr; if(wl == 0){ /* have left branch */ wl = lair(); } if(wr == 0){ wr = lair(); } if(wl==0 || wr==0 || wl*dl !...

SuCicada

UVa Online Judge 西班牙Valladolid 在线判官 和 uDebug使用简单教程

udebug使用在后面 https://uva.onlinejudge.org/ 1、这是主界面,如果你还没有账号,那么就点击图中的register。 2、然后就是填写信息,邮箱要用gmail,信息填写完成后点击下方的register 3、之后打开邮箱查看接受的邮件,并点击其中的链接完成注册确认,之后会转到uva oj,如果页面显示 your account is now active.You may now log in!则表示注册完成。 4、然后输入用户名密码登录 5、然后在左边的栏目中,点击Browse Problems 就可以找到有关刘汝佳以及其他一些著名套题了。 6、然后是关于如何答题,现在我们打开了一道题目,看图上红框住的左上角, (1)其中我们点击PDF,会下载下来本道题的pdf格式文件 (2)我们点击submit就是提交代码了。 其中如果是用的C语言或C++选择第一个c++,提交结果没有ac,如果不是代码问题,那么试试选择c++11吧。 参考了UVAOJ的注册和评测入门 (3)最后我想说一下在看题界面的那个Debug选项,就是旁边有个红色的甲虫的。 若果打不开udebug就挂vpn试试吧 https://www.udebug.com/UVa/1589 (当前是1589号题) 我们点进去后,一共四部分。上左边就是一些用户上传的关于本题的一些样例。点击其中一个,这些样例就会显示在右边的框中。 然后我们点击下方写着Get Accepted Output蓝格,就会在下方的左边出现这些样例的正确输出结果。我们可以把这些样例用我们的代码输出的结果粘到右边的框中。之后点击Compare Outputs 进行对比。 这样我就能很方便的知道我们的代码在处理哪一个样例上出现里问题,更改起来也更有方向性。还有如果出现了图中的情况,明明都对但还是显示不对,那是因为他的输出默认多了一个空行,这个一般和代码没有关系。默认为对就行了。 我们还可以在上面快速搜索你需要的题号。 目前支持这些oj 这是主页https://www.udebug.com/ 可以去他的Twitter和Facebook上看看,网上关于udegug的信息不多。

SuCicada

uva1583 - Digit Generator (生成元)

如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小 生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。 Sample Input 3 216 121 2005 Sample Output 198 0 1979 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=829&page=show_problem&problem=4458 //先算出所有的生成元x的原数y,以s[y]=x的形式将其存起,在求y的解x的时候,直接输出是s[y]即可 //所以为了求最小生成元也就是x,就要从尾到头的循环算y。 #include<iostream> #include<cstdio> #include<string.h> using namespace std; int const N = 100000; int sn[N+5]={0}; int main() { memset(sn,0,sizeof(sn)); for(int i=N;i>=0;i--) { int n=i; int s=i; while(n>0) { s+=n%10; n/=10; } sn[s]=i; } //for(int i=0;i<N;i++) // cout<<sn[i]<<" "; // cout<<endl; int n,T; cin>>T; while(T--) { int i; cin>>n; cout<<sn[n]<<endl; } return 0; } //AC at 2017/12/7 以下算法虽然一样可以算出正确答案,但是超时,oj不通过。...

SuCicada

uva272 (TeX)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=829&page=show_problem&problem=208 TEX is a typesetting language developed by Donald Knuth. It takes source text together with a few typesetting instructions and produces, one hopes, a beautiful document. Beautiful documents use “ and ” to delimit quotations, rather than the mundane " which is what is provided by most keyboards. Keyboards typically do not have an oriented double-quote, but they do have a left-single-quote and a right-single-quote '. Check your keyboard now to locate the left-single-quote key (sometimes...

SuCicada

virtualbox 发送 ctrl alt fn组合键的方法:使用热键(默认右ctrl)+fn即可

一般是用来在虚拟机中切换文字模式和图像化窗口模式的。 如果直接使用ctrl+alt+fn可能会触发主机的组合键。 所以使用热键+fn

SuCicada

Visual Stdio Code 运行生成任务 输出不了

刚刚解决了pip安装的问题,现在打开vscode又出现了问题。 我像平常一样按下ctrl+shift+B 运行我的python文件 但是结果就像我用vc写C语言一样,闪过一个黑窗口的终端界面,然后就没了。没有输出,控制台界面也没有停下来让我好好看看。 我查了查,没有结果。 然后灵机一动,我知道怎么回事了。都怪我手贱,将python.exe这个文件设置成了默认管理员模式运行。 我不知道为什么,反正我取消了管理员模式运行就好了。

SuCicada

windows 一键切换ip dns脚本

下载bat脚本 https://github.com/SuCicada/ipswitch 然后运行,按照提示输入即可 @echo off&color 1E&title IP地址快速切换器 echo ┌────────────────────────────┐ echo | | echo | 切换网络环境,请输入当前所在位置 │ echo | | echo └────────────────────────────┘ >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" :choice set choice= set /p choice=【外网】请选择1,【内网】请选择2 :[1,2]? if %choice%==2 goto school_lan if %choice%==1 (goto lab_lan) else (echo 输入错误,请重新输入&goto choice) :lab_lan set eth="本地连接" set ip=10.0.0. set netmask=255.255.255.0 set gw=10.0.0.1 set dns1=8.8.8.8 set dns2= echo. echo 切换到外网有线环境 echo. goto switch :school_lan set eth="本地连接" set ip=10.90.6. set netmask=255.255.255.0 set gw=10....

SuCicada

WSL2 -- Windows10 环境中运行 Linux (无缝衔接,开发利器)

WSL2 是什么 全称为 Windows Subsystem for Linux2。是一个能在Windows上运行Linux运行环境的工具。是WSL的第二代。 简单来说就是Windows下的Linux虚拟机。 比虚拟机好在哪里 启动速度超快。文件访问跨系统访问无限制(因为两个系统之间的目录是通过网络映射挂载的) Windows、Linux 命令混合使用。无论在哪个系统的终端,都可以使用另一个系统的命令。(比如在Linux中使用explorer.exe . 看看会发生什么) 比WSL1好在哪 最主要体现在网络隔离、以及进程管理(比如ps)。 WSL2使用类似NAT的虚拟机网络模式。这样的好处就是Linux和Windows的网段是隔离的。 而WSL1更像是运行在Windows上的一个程序,所以网络IP、端口、进程状态等都是用的Windows宿主机。 所以这么来看WSL2更像是纯粹的一个虚拟机了。 安装&配置 在 Windows 中运行 Linux:WSL 2 使用入门 適用於Linux的Windows子系統(Windows Subsystem for Linux;WSL) 进阶提升效率 Windows Terminal 比PowerShell 更好用、更美观的Windows终端。支持窗口多开,WSL直开。 玩转WSL(2)之安装并配置Windows Terminal Ctrl+Alt+T 开启终端。 下载WinHotKey,设置Windows Terminal默认窗口为WSL。 体验原生Linux终端的快感。 肯定有用的脚本 todo 衍生资源 WSL 和 WSL2 简单对比

SuCicada

三柱体hanoi问题(C_C++语言版)

控制台运行输入数据格式 : xxx(程序名) 3(汉诺塔层数) 会显示出每一步的移动步骤,以及每一柱上留有的盘数 #include<iostream> #include<sstream> using namespace std; int a=0,b=0,c=0; void hno(int n,char from,char mid,char to) { if(n>1) { hno(n-1,from,to,mid); hno(1,from,mid,to); hno(n-1,mid,from,to); } else { switch(from) { case 'A':a--;break; case 'B':b--;break; case 'C':c--;break; } switch(to) { case 'A':a++;break; case 'B':b++;break; case 'C':c++;break; } cout<<from<<"-->"<<to<<" A:"<<a<<" B:"<<b<<" C:"<<c<<endl; } } int main(int argc,char *argv[]) { // cout<<argc<<endl; // cout<<"_"<<argv[1]<<"_"<<endl; // return 0; stringstream s; int n;//=*argv[1]; s<<argv[1]; s>>n; //cin>>n; a=n; //hno(n,) hno(n,'A','B','C'); return 0; }

SuCicada

三柱汉诺塔问题(Python版)

思路一样 def move(n, a, b, c): if(n>1): move(n-1,a,c,b) move(1,a,b,c) move(n-1,b,a,c) else: print a,'-->',c n = input('input a number') #int(raw_input()) move(n, 'A', 'B', 'C')

SuCicada

修改 linux、ubuntu 默认终端,外加terminator颜色方案

需求:使用 cinnamon 桌面,想要修改右键打开的终端为terminator 先安装 dconf-tools sudo apt-get install dconf-tools 依次进入 org -> cinnamon -> desktop -> default-applications -> terminal 然后将键值改成你想要的 比如terminator为 key value exec: x-terminal-emulator exec-arg: -e 最后来一个一键脚本 gsettings set org.gnome.desktop.default-applications.terminal exec /usr/bin/x-terminal-emulator gsettings set org.gnome.desktop.default-applications.terminal exec-arg "-e" terminator颜色方案 配置文件 ~/.config/terminator/config [global_config] always_split_with_profile = True enabled_plugins = LaunchpadCodeURLHandler, APTURLHandler, LaunchpadBugURLHandler focus = system geometry_hinting = False handle_size = 2 inactive_color_offset = 1.0 title_font = mry_KacstQurn Bold 11 title_hide_sizetext = True title_receive_bg_color = "#729fcf" [keybindings] paste = <Primary>v [layouts] [[default]] [[[child1]]] parent = window0 profile = default type = Terminal [[[window0]]] parent = "" type = Window [plugins] [profiles] [[default]] background_color = "#3e3535" background_darkness = 0....

SuCicada

关于 1.0_0.0 以及 0.0_0.0 的值

#include<cstdio> #include<iostream> using namespace std; int main() { printf("%d\n",1.0/0.0);//0 printf("%d\n",0.0/0.0);//0 printf("%lld\n",1.0/0.0);//9218868437227405312 printf("%lld\n",0.0/0.0);//-2251799813685248 printf("%lf\n",1.0/0.0);//1.#INF00 printf("%lf\n",0.0/0.0);//-1.#INF00 cout<<1.0/0.0<<endl;//inf cout<<0.0/0.0<<endl;//nan return 0; }

SuCicada

关于 Flink1.11.1 找不到 Hadoop Native库解决方法

可以试试在 flink 的 conf/flink-conf.yaml 配置文件中加入配置如下 其中的native库的具体路径换成你自己的。 yarn.application-master.env.LD_LIBRARY_PATH: /opt/cloudera/parcels/CDH/lib/hadoop/lib/native:$LD_LIBRARY_PATH yarn.taskmanager.env.LD_LIBRARY_PATH: /opt/cloudera/parcels/CDH/lib/hadoop/lib/native:$LD_LIBRARY_PATH

SuCicada

关于Flink 本地测试,自定义WebUI 端口的方法

以1.11.1版本举例,相差不大的版本之间大同小异。 先给成品:以Scala代码举例,Java大同小异。 通过反射将配置加入env的配置对象中。之后使用修改过的env来创建flink的任务流即可。 val env = StreamExecutionEnvironment.getExecutionEnvironment val javaEnv: environment.StreamExecutionEnvironment = env.getJavaEnv val field = classOf[org.apache.flink.streaming.api.environment.StreamExecutionEnvironment].getDeclaredField("configuration") field.setAccessible(true) import org.apache.flink.configuration.Configuration val configuration: Configuration = field.get(javaEnv).asInstanceOf[Configuration] configuration.setString("rest.bind-port", "8081") 下面是探索过程,没兴趣的可以过了。 当我们加入了pom依赖后.发现能够看到本地IDE中的flink的webUI了. <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-runtime-web_2.11</artifactId> <version>${flink.version}</version> <scope>compile</scope> </dependency> 根据日志中显示可知我们的本地web端口为16434. 这不是一个我们想要看到的. 而且每一次运行都会产生一个随机的端口.这实在很痛苦. 17:15:28,577 INFO org.apache.flink.runtime.dispatcher.DispatcherRestEndpoint - Rest endpoint listening at localhost:16434 17:15:28,578 INFO org.apache.flink.runtime.highavailability.nonha.embedded.EmbeddedLeaderService - Proposing leadership to contender http://localhost:16434 17:15:28,581 INFO org.apache.flink.runtime.dispatcher.DispatcherRestEndpoint - Web frontend listening at http://localhost:16434 17:15:28,581 INFO org.apache.flink.runtime.dispatcher.DispatcherRestEndpoint - http://localhost:16434 was granted leadership with leaderSessionID=eb84fead-f735-4350-aff4-a7f883013432 所以我们要想办法来固定端口....

SuCicada

关于Flink写入Redis没有incrByFloat等方法的解决措施

首当其冲:改源码。 使用的是org.apache.bahir:flink-connector-redis_2.11 目前2020年8月中maven官方库中最新的版本只有1.0。此版本未提供incrByFloat的方法。 首先猜测可能maven库不是最新的。去到此项目的github上一看。居然是1.1-SNAPSHOT的版本。但是此版本中仍然没有找到incrByFloat。 所以我们可以使用改源码重新编译的方式来解决这个问题。org.apache.flink:flink-connector-redis_2.11库与其类似。好在这个库比较简单,不需要做结构性的改动。 本博客意在记录需要改动源码的地方。 org.apache.flink.streaming.connectors.redis.common.container.RedisCommandsContainer redis的操作接口,在这里添加void incrByFloat(String key, Double value); 的接口定义。 操作接口的实现有2处。org.apache.flink.streaming.connectors.redis.common.container.RedisClusterContainer和org.apache.flink.streaming.connectors.redis.common.container.RedisContainer 加入incrByFloat实现:(写法完全照抄其他方法实现) @Override public void incrByFloat(String key, Double value) { Jedis jedis = null; try { jedis = getInstance(); jedis.incrByFloat(key, value); } catch (Exception e) { if (LOG.isErrorEnabled()) { LOG.error("Cannot send Redis message with command INCRBYFLOAT to key {} and value {} error message {}", key, value, e.getMessage()); } throw e; }finally { releaseInstance(jedis); } } org.apache.flink.streaming.connectors.redis.common.mapper.RedisCommand...

SuCicada

关于linux 下pycharm 输入法不跟随的问题(未解决)

http://tieba.baidu.com/p/3858968877#70635782254l https://neue.v2ex.com/t/306947 貌似linux无解

SuCicada

关于linux上运行ONS

https://tieba.baidu.com/p/5202079866?pv=1 用ONScripter 安装依赖库 sudo apt-get install libsdl1.2debian libsdl-sound1.2 libsdl-ttf2.0-0 libsdl-mixer1.2 libsdl-image1.2 libasound2 libjpeg62 libpng12-0 libvorbisfile3 libsmpeg0 libavifile-0.7c2 libbz2-1.0 libogg0

SuCicada

关于Scala 的尾递归,使用JITWatch从字节码观察其原理

先说概念: Scala的尾递归会被编译器自动优化成循环 主题直通车 先来简单看下一个简单验证方法 对比普通的递归: def fun2(x: Int): Int = { if (x == 1) throw new Exception("nooo") else fun2(x - 1) + 0 } 结果: Exception in thread "main" java.lang.Exception: nooo at Main$.fun2(Main.scala:17) at Main$.fun2(Main.scala:19) at Main$.fun2(Main.scala:19) at Main$.fun2(Main.scala:19) at Main$.fun2(Main.scala:19) 。。。。 at Main$.fun2(Main.scala:19) at Main$.main(Main.scala:25) at Main.main(Main.scala) 现象: 我们能看到在递归结束前,这个方法已经进入自己很多次了。 尾递归 def fun(x: Int): Int = { if (x == 0) throw new Exception("nooo") else fun(x - 1) } 结果:...

SuCicada

关于ssh scp 不用交互式 即自动或者带密码执行

sshpass方式 expect方式 第一种方式 通过 sshpass 来 sshpass -p "xxxx" ssh root@xxx.xx.xxx sshpass -p "xxxx" scp xxxx root@xxxx:/xxxxx 但是sshpass好像不能回显. 对于scp不太方便 但是对于ssh确实很好用的 第二种方式 通过expect 用法参考 比如使用ssh #!/usr/bin/expect set timeout 30 spawn ssh root@sucicada.tk expect "password:" send "Ubuntu2019\n" interact 通过以上方式可以使用一个脚本就能登录到远程主机上了

SuCicada