Apr 29
超赞。有了形象的动画,配上伪代码,算法学起来应该会简单一点吧?

http://www.sorting-algorithms.com
Mar 29
10题,Boluor负责看ABC,Sandy负责看DEF,Felix负责看HIJK。
其实是给自己找理由,拖时间,然后等Board看拿题可以做,嗯。
一番折腾以后开始写。。额。。没题可以写=.=
Boluor看了A题,推导公式,推了半天没思路(怪不得他家教的高中生立体几何听不懂=.=)
于是我接过来,把公式从头推导了几遍,写阿写阿写,写,wa了n次。
发现样例数据是圆柱,出题人太狠了=.= 都不给个圆台的测试一下。。。
然后发现,rRHV是float,不是integer =.= Felix的错,嗯。
后来找了几组比较好算的数据测试,比如1 2 2 19/12PI之类的,都OK,但是还是WA。
而且加了一句 if(hx > H) hx = H; 但是还是WA,囧。
好吧,Sandy看了看,E题是个简单的模拟,于是他上。
写出来代码还是比较顺利的,跑样例也是lose/win/lose,很好很强大,可惜就是WA。
然后多亏了我家可爱宠物加菲的名字比较短,xay,算了一下,xx, 50, xx
然后对照了一下Sandy的程序,xx, 22, xx,嗯。囧阿。
查了一下,原来是累乘器初值是零,改之,交之,AC之,Happy之,2Hour了已经=.=
然后继续A,Boluor以为是精度的问题(因为需要开三次方)
于是根据我的思路,把我一步一步的计算合并,化简
然后囧囧囧囧地测试,发现都OK阿,圆柱的也对,圆台的也对,终于咬牙交了一次。
嗯,结果果然是WA。
好吧,Sandy说,测一组极端数据,于是100 100 100 1000000000,答案是3800+
然后Felix终于反应过来,这TM不是溢出了么?——开水溢出了,嗯。
好吧,我承认我又做挫事了,把上面那句if(hx > H)放在if(r == R)的else里面了=.=
提出来,交之,AC之,Happy之,193min,5次提交-.-
然后Sandy看I题,想到了O(n^2)的算法,想RP之,于是去敲代码
我则拿起J题,好吧,又是推公式,解析几何,我郁闷。
................................坚持不懈地,终于退出了公式
把Sandy换下来,敲代码,到末尾发现有个地方没想明白——算根的时候取正号还是符号?开方的时候呢?
于是回头又仔细想了下,并重新推了公式,发现原先的公式推错了,于是再次把sandy换下来
敲代码,编译,测试,WA掉。
然后和Boluor讨论了下,让他看着我把公式重新推一遍,发现我的公式确实都是正确的
但是代码思路有点混乱,于是重新去改了下,清晰了,测试
然后囧囧囧囧地发现,答案是1.56xxxx,我们的答案是0.0097xx
加起来正好是PI/2,心情激动阿,差点就学后面的同学吼出来了。
然后一查,发现我没有加acos =.=
加上acos,第一组测试数据正确了,但是后面两组在输出-1以后跟上了一堆乱码,我囧。
其实是我的cmp(double,double)把符号写反了,delta<0每次都是false,
于是对小于零的double也开方了,但是输出的乱码又是-1开头的,这个东西相当有迷惑性阿,
不得不佩服裁判出的输出规则,你说要是没解你输出个No Solution多好阿,浪费俺们时间么=.=
然后在Sandy的帮助下找到了这个答案——原来我又做挫事了,sigh。247min
最后的时间都给sandy做他的I题,本来我是帮他看代码的,但是思绪有点混乱,看不下去
Boluor帮他出了几组小数据,在几次RE以后都没问题,交之,很不出意料地TLE了
这个时候还有8min,于是我就去找我家宠物feli玩了,嗯。
--
我发现我们队是慢热型的,去年的校赛他们两个也是这样的,今年的预赛也是这样的。
所以我们实在是不适合参加激烈的ACM比赛,不过还是有一点非常赞的——
俺们队灰常河蟹,嗯。
尽管这一次Boluor没有写出AC的代码,但是A题和J题少了他,也是做不出来的。
同样,在DEBUG那A和J两题的时候,Sandy也给出了关键性的意见。
当247min看到Judge返回J的那个YES以后,我们几乎是同时喊出一声YES!这种感觉真好:D
这次比赛,根据预赛的情况,Felix的期望是三等奖,RP爆发或许有二等奖
最后出了3题,在校内11名,达到了预期目标,三等奖(第三),很满足了(就是奖金有点少=.=)
此外我发现,BFS在做比赛的时候,一直是很开心的~就像去年去NUDT一样~ ^_^
我觉得这才是最重要的,有处得好的队友,一起努力,开心做题。
Mar 23

zz do...while(0)的妙用 不指定

felix021 @ 2009-3-23 12:50 [IT » 程序设计] 评论(3) , 引用(0) , 阅读(6746) | Via 本站原创
最近在看xen/extra/mini-os的代码的时候发现了n多do{ooxx}while(0)的东东,有点诡异,于是搜了一下,茅厕顿开,嗯。

zz from http://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html (貌似是个MVP的Blog阿,膜拜)

--

在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。

1. do...while(0)消除goto语句。
通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样:
version 1
Mar 15
BFS @ 2009-03-14
A,搜索,没做。
B,搜索,没做。
C,计算几何,没做。
D,加密算法,Boluor没做完。
E,模拟,Sandy写的,trick是需要先判断下一个走的人是谁(B/W)。
F,表达式的计算,我之前没有看题目,但是扫了一下,觉得应该很简单,回头写一下,应该不难吧。
G,计算几何,超简单的一个等比方程解一下;trick在于两个int加起来以后会OverFlow。
H,字符串处理,数据量很小,不要Trie,用map+set搞定。
I,没看。
J,DP,Sandy推出一个方程,和他讨论了一下,就被拖到机房去,然后他写了AC了。

oak真是相当的不堪阿,sigh。

--

党员活动室确实很适合看电影,音效非常好。

--

贴上我写的代码:
Mar 12
简单写一下吧:
1. 自定义一个struct t,是set里要放的东西。
2. 定义一个仿函数cmper (仿函数functor,其实就是一个重载了operator()用于比较前述struct的类)。
3. 使用这样的语句: set<struct t, cmper> a; 来定义一个包含struct t的set容器。
4. 使用则样的语句: set<struct t, cmper>::iterator ap; 来定义一个对应的迭代器。

@ 2009-03-16补充:其实重载 bool operator < 也可以,就不需要仿函数了。

具体代码如下:
#include<iostream>
#include<set>
using namespace std;

struct t{  //set里的东西
    int i;  //可以再增加其他内容,为了简单只写了一个
    t(){i = 0;}          //构造函数
    t(int _i):i(_i){}    //构造函数
    friend inline ostream & operator <<(ostream &os, const t & a){  //重定向operator <<,纯粹是为了方便输出
        return (os << a.i);
    }
};

class cmper{  //仿函数
public:
    bool operator()(const t &a, const t &b)const{ //重载operator ()
        return a.i < b.i;
    }
};

set<t, cmper> a;  //定义一个set

int main(){
    a.insert(t(3));
    a.insert(t(1));
    a.insert(t(2));
    set<t, cmper>::iterator ap; //定义一个迭代器
    for (ap = a.begin(); ap != a.end(); ap++){ //遍历
        cout << (*ap) << endl;
    }
    return 0;
}

//重载example
struct t{
    int i;
    bool operator < (const t & a)const{
        return i < a.i;
    };
};
Mar 12
有两个版本,都很有意思。如果觉得看英文版郁闷,可以对照着google翻译看“中文版”:
http://translate.google.com/translate?prev=hp&hl=en&js=y&u=http%3A%2F%2Fwww.felix021.com%2Fblog%2Fread.php%3F1503&sl=en&tl=zh-CN&history_state0=

-------------------------------------------------------------

version 1 zz from http://topic.csdn.net/u/20070114/01/ee02dfed-511b-419a-91fe-89917726354a.html 7楼

  One day a Novice came to the Master.
  "Master, " he said, "How is it that I may become a Writer of Programs? ".
  The Master looked solemnly at the Novice.
  "Have you in your possession a Compiler of Source Code? " the Master asked.
  "No, " replied the Novice. The Master sent the Novice on a quest to the Store of Software.

  Many hours later the Novice returned.
  "Master, " he said, "How is it that I may become a Writer of Programs? ".
  The Master looked solemnly at the Novice.
  "Have you in your possession a Compiler of Source Code? " the Master asked.
  "Yes, " replied the Novice.
  The Master frowned at the Novice.
  "You have a Compiler of Source. What now can prevent you from becoming a Writer of Programs? ".
Mar 9

POJ 不指定

felix021 @ 2009-3-9 16:43 [IT » 程序设计] 评论(2) , 引用(0) , 阅读(6369) | Via 本站原创
前些天从某网站下载到了POJ的程序(不是源码) ( @ http://www.dssz.com/250473.html )
要1个积分的。1个积分要1个大洋的。一次性最少充10个积分的。于是我就少了10个大洋。于是就down到了POJ。
down下来是12MB,解压后大几十MB,发现里面带有一个3.4.2版的gcc,40+MB,Orz。去掉那个gcc打包,2MB。
在自己机器上架起来了。Windows(XP) + Tomcat(5.5.27) + JDK(6)。可以正常运行。
反正某一次我去申请了,填了个表,但是PKU那边根本没回复。
刚刚到POJ上面去看了一遍,貌似以前的申请已经被通过了,再次点开那个页面就可以下载了,我囧。
下载下来一看,12.9MB,gcc还是3.4.2。原来是我浪费了10个大洋。

down下来的包里面有一个license.txt,全英文的(真无聊。。),之前down下来懒得看
这回直接贴到translate.google.com,然后看到超搞笑的翻译:

引用
...the source code of the Software.  ----  ...源代码的软件

引用
5. LIMITATION OF LIABILITY
In no event will PKU ACM Team be liable for any damages, including but not limited to any loss of revenue, profit, or data, however caused, directly or indirectly, by the Software or by this Agreement. 
5 。责任限制
在任何情况下,北京大学计算机小组须承担任何赔偿,包括但不限于任何损失的营业收入,利润,或数据,但是造成的直接或间接的软件或通过本协定。

看来那个站点还是违反的这个license的,嗯。

看到第六点:
引用
6. DISTRIBUTION
No distribution is to be made of the Software by the Licensee.  The Licensee may make one copy of the Software for backup purpose only.
//Google的翻译
6 。分布
没有分配将软件由持牌人。持牌人可一复制的软件,如备份用途。


看来还是不允许随便流传的。。。
Mar 8

whuacm - oak - warmupII 不指定

felix021 @ 2009-3-8 23:56 [IT » 程序设计] 评论(2) , 引用(0) , 阅读(5767) | Via 本站原创
今天下午在实验室一个人做的。
一共写了5题,3AC,1WA,1没交。

A, Problem 1398 - Stock Exchange
最长递增自序列。因为是n <= 100000的数据量,所以显然N^2的程序是不行的,
google到了一个Nlog(N)的程序,基本上看懂了,自己写了一遍,AC,顺便贴在后面吧。

B, Problem 1399 - Sky Code
不会,嗯。完全没思路。我讨厌纯数学题=.=

C, Problem 1400 - Perfect Election
暴力写了个,没过样例,于是没交。
——2SAT问题,合取,析取,范式,DFS,强联通分量。晚上跑步的时候feli说的。不很懂,详见Baidu Or Google

D, Problem 1401 - Lucky Cities
没看,貌似图论,想必是不会。

E, Problem 1402 - Build Your Home
顺序(顺时针或者逆时针)给出多边形(不一定是凸多边形)的顶点,求面积。
用三角形的方法写了一个,WA了。后来张文说他用的梯形写的,AC了,于是改了一下,我也AC了。
看来还是要注意,sqrt尽量少用,嗯。代码也贴后面吧。

F, Problem 1403 - Quick Answer
并查集,看起来不难阿,代码也写得蛮快,就TMD的总是wa,我郁闷。回头学习下别人的代码吧。。WA的代码就不贴了
@2009-03-09 AC了,我的思路是基本上是正确的,有2个小错
  a. 输入有点小问题;因为题目的输入数据有一些trailing space,囧。
  b. q x y,当x==y的时候输出的是NO。
  代码也附在后面吧,我不会标准的并查集写法,这是按自己的想法写的。

G, 没看。

H, Problem 1406 - Internet Service Providers
纯数学题,蛮简单,代码贴后面,不写什么了。

I,  Problem 1405 - GCD Determinant
没做,看群里的说法,也是纯数学题=.= 貌似是把欧拉函数乘起来就好了,不要算行列式,嗯。

分页: 14/23 第一页 上页 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]