posts - 20,  comments - 13,  trackbacks - 0

解决问题:
N个男的和M个女的,已知道每个男的只能接受哪些女的,求最多能够匹配多少对情侣?

思路:
1.只要求出有多少个男的找到对象即可。
2.遍历所有男的,对于每个男的做以下处理(3~5),最后进入6
3.随便找一个他能够接受的女的,判断这个女的是否被“挑选”过了,没挑选过的则设置为挑选并进入4,否则继续找下一个女的,找遍所有都是挑选过的则进入5
4.判断这个女的是否有男朋友了,没有就直接和上述的男的进行匹配,如果有的话(假设她的男朋友是A),则对A进行3的操作,如果该操作返回的是真,则说明这个女的可以和男的匹配,而A和另外的人匹配。返回真。
5.返回假
6.如果该男的找到女的,则最大匹配数+1.

没说清楚,配合代码吧,很简单的一个模板。

#include <stdio.h>
#include 
<string.h>

int n,m;
int sum;
int p[201];
int b[201];
int map[201][201];

bool path(int cow)
{
    
int i;
    
for(i=1;i<=m;i++)
    
{
        
if(b[i]==0 && map[cow][i] == 1)
        
{
            b[i] 
= 1;
            
if(p[i]==0  || path(p[i]))
            
{
                p[i]
=cow;
                
return true;
            }

        }

    }

    
return false;
}


int main()
{
    
int i,j;
    
while(scanf("%d%d",&n,&m)!=EOF)
    
{
        sum
=0;
        memset(map,
0,sizeof(map));
        memset(p,
0,sizeof(p));
        
for(i=1;i<=n;i++)
        
{
            
int a,b;
            scanf(
"%d",&a);
            
for(j=1;j<=a;j++)
            
{
                scanf(
"%d",&b);
                map[i][b] 
= 1;
            }

        }

        
for(i=1;i<=n;i++)
        
{
            memset(b,
0,sizeof(b));
            
if(path(i))
                sum
++;
        }

        printf(
"%d\n",sum);
    }

    
return 0;
}


下面尝试用邻接表来解决类似的题目,但是如果不释放内存的话,会MLE,而通过free释放内存又会出现TLE错误,太囧了。。。良智说用STL的vector应该可以处理这个问题,回头再用vector,今天先发free的做法,虽然过不了~~

 

#include <stdio.h>
#include 
<string.h>
#include 
<stdlib.h>

struct edge{
    
int to;
    edge
* next;
};

edge list[
101];

int p,n;
int par[301];
int b[301];
struct edge* temp;
struct edge* e;

bool path(int person)
{
    
struct edge* e = list[person].next;
    
while(e)
    {
        
if(b[e->to]==0)
        {
            b[e
->to] = 1;
            
if(par[e->to]==0 || path(par[e->to]))
            {
                par[e
->to]=person;
            
//    printf("%d__%d\n",e->to,par[e->to]);
                return true;
            }
        }
        e 
= e->next;
    }
    
return false;
}

int main()
{
    
int i,j;
    
int a,t2;
    
int t;
    
while(scanf("%d",&t)!=EOF)
    {
        
while(t--)
        {
            scanf(
"%d%d",&p,&n);
            {
                
int ans = 0;
                
//memset(map,0,sizeof(map));
                memset(par,0,sizeof(par));
                
for(i=1;i<=p;i++)
                {
                    scanf(
"%d",&a);
                    
//list[i] = (struct edge*)malloc(sizeof(edge));
                    struct edge* head = (&list[i]);
                    e 
= head;
                    
while(a--)
                    {
                        scanf(
"%d",&t2);
                        temp 
= (struct edge*)malloc(sizeof(edge));
                        temp
->to = t2;
                        e
->next = temp;
                        e 
= temp;
                    }
                    e
->next = NULL;
                    e 
= head;
                    
/*
                    while(e)
                    {
                        printf("%d__%d\n",e->from,e->to);
                        e=e->next;
                    }
*/
                }

                
for(i=1;i<=p;i++)
                {
                    memset(b,
0,sizeof(b));
                    
if(path(i))
                    {
                        ans
++;
                    }
                    
else
                    {
                        printf(
"NO\n");
                        
break;
                    }
                }
                
if(ans==p)
                    printf(
"YES\n");
                
for(i=1;i<=p;i++)
                {
                    e 
= list[i].next;
                    
while(e)
                    {
                        temp 
= e;
                        e
=e->next;
                        free(temp);
                    }
                }
            }
        }
    }
    
return 0;
}

posted @ 2010-05-16 00:56 ACong 阅读(185) | 评论 (0)编辑 收藏
如果我们只是做一个单机版的swf,与世隔绝,那么完全不会接触到接下来我们要说的这么多东西。。。可见提高对你项目的要求是使你学习更多知识的方法。

最常见的,我们有这样一个主swf(为了简单说明,再假设只有这么一个swf),另外我们有很多资源:jpg,png,xml,txt,swf等等,我们将之放在一个文件夹Resource下,然后将Resource和主swf放在同一个目录下,然后我们通过这个swf加载、访问这些资源,我们发现,非常没有问题。

然而,当我们最终需要将这个swf放在网页上,并且将那些资源都放在网页上,那么他们最好还是跟本地一样的文件结构存放,但是我们知道,网页上的swf肯定不会自己跑出来显示,肯定是要网页来加载他,在网页中通过"***.swf?p=...&p2=.."这样的方式来调用这个swf和传参数。如果这个网页也是和swf放在同一个文件夹下,那也是没问题的。可是我们有可能会有很多这样的网页,都放在一个文件夹很难管理,于是我们将他们放在不同的文件,这就会导致这样的问题:A网页是放在"../1/2/A",B网页是"../5/5/B",那么URLRequest的默认路径是哪个呢?是主swf所在的位置么?错,其实是看具体调用它的网页的地址,例如A调用时,URLRequest默认路径是"../1/2/",这样的话,如果我们URLRequest()时只会在A或B下面找,而不会在swf所在的目录中找,自然找不到。所以我们的做法是:获得主swf的绝对路径,将之作为URLRequest的路径。要想获得该swf的绝对路径,可以这样:test = stage.loaderInfo.url; 另外我们要将文件名去掉:
test .slice(0,test.lastIndexOf("/")+1);理论上这在本机上也行得通,但是实际上是:显示安全沙箱出错或者是加载资源出错。为什么呢?

看看这个例子就知道了:
在本机上,我们运行swf,得到的test的值为file:///C://test/test.swf,路径也就是file:///C://test/
在本机上,我们运行同个目录下的html文件,发现沙箱问题、加载问题等等问题,test的值是file://C:\test\,这就难怪他找不到了

于是我们要改成:
test .slice(0,test.lastIndexOf("\\")+1);  注意,前面的\只是转义字符,实际上就是让路径遇到最后一个"\"时截止。这样的话按道理本机运行swf会有问题,但是实际上却是没有问题。。。

由于之前这个问题一直缠绕着我,导致我将它和安全沙箱问题混淆了,以为安全沙箱是多么恐怖的事情。

其实安全沙箱很简单:
当两个不同文件夹下面的文件(这两个文件至少一个是swf)要通信时,会出现安全沙箱问题。可用下面的任意一个方法解决:
1.在swf里面通过Security.allowDomain("另一个文件的地址和名字");
2.在另一个文件所在文件夹下建一个crossdomain.xml,里面写上:
    <cross-domain-policy><allow-access-from domain="允许访问的对方的地址和名字" /></cross-domain-policy>
3.如果这两个文件中一个是网页的话,可以在网页调用swf的标签处加上:allowScriptAccess="允许访问的对方的地址和名字"
4.万不得已、仅在平时调试时:在C:\windows\system32\Macromed\Flash\FlashPlayerTrust 下面,新建一个随便的txt文件,里面将你要设置为同个域的文件名(包括路径),每个一行写在里面,然后将文件改后缀为.cfg(其实txt应该也没问题)。



posted @ 2010-05-14 17:40 ACong 阅读(760) | 评论 (0)编辑 收藏
1.一个fla想要使用另一个fla的库元件,方法是文件-》导入-》打开外部库,然后就可以将自己想要用到的新元件拖到正在使用的fla中了。

2.当项目要更新资源的时候,可以通过上述方法,然后用新元件覆盖掉旧元件,方法很笨重:改掉原来元件A的名字,将新元件改为元件A原来的名字,这种只适用于需要导出为AS对象时,如果只是普通元件,并且这个元件有被其他地方引用到,那么Flash表现得很智能,当你修改一个元件时,会把其他调用到他的地方也随之改动,解决方案也很笨重,到那个元件下面,点编辑,选中元件,点左边属性里面的更换,换为新的元件。

3.关于遮罩:遮罩就是画一个形状,然后将一堆东西放在这个层下面,那么这个形状的部分都是透明的,大家看得到,其他部分都是非透明的,大家看不到。如果你想将里面一个图层的东西跟遮罩分开,只需要将它移到遮罩外并且是下边(上边的话我会遇到问题。。)

4.关于AS代码和Flash库元件的分离问题:到底是要用库元件呢,还是要用代码中的对象好呢?到底是要在库元件中调好位置,还是在代码中调好位置好呢?到底一个混合的元件里面,那些东西该用代码,那些东西该用CS4呢?

posted @ 2010-05-13 16:12 ACong 阅读(303) | 评论 (1)编辑 收藏
(本文摘自http://hi.baidu.com/flex101/blog/item/f8a87bf7c21d0ed2f3d38518.html)
在AS中使用json其实并不是一个必须或是很好的选择,因为AS对xml的解析已经很不错了,但是为什么可以考虑使用 json呢,有以下几点:

json是介于单纯的文本方式(如:

  • firstName=Brett&lastName=McLaughlin& email=brett@newInstance.com)和xml(<request><firstName>Brett& lt;/firstName><lastName>McLaughlin< /lastName><email>brett@newInstance.com</email>< /request>)中间的一种格式,他具有文本和xml的中性优势:数据量小和清晰的数据格式。
  • json是JavaScript Object Notation的简写,那么意思就是说他是来自于javascript的东西。因为现在ajax的流行,大部分网站会采用ajax的模式和构架,那么 json会是一个数据传输的首选(文本方式太简单,要是大数据量的时候无法理解,xml的方式数据量大,在解析的时候会增加服务器负担),那么要是一个网 站从ajax构架的基础上出一个flex/flash版的界面的时候使用json会最少地减少服务器端的程序改动。
  • 服务器端现在有成熟的JSON解析代码(因为JSON运用太广泛了),那么在开发的时候也不用担心服务器 端的解析。
下面就介绍一下adobe的官方的json类的用法

下面是教程,比较简单:
1、服务器端来的json
怎么样获得服务器端的json我就不说了吧(就是通讯),那么得到的应该是一个字符串,存入变量serverJSON,使用方式如下:
程序代码 程序代码

import json.*;

//json格式字符串 存入变量:serverJSON;
var serverJSON:String = '{ "programmers": [{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }],"authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }],"musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }]}'

//开始使用
var json:Object = new Object();
json = JSON.decode(serverJSON);
trace(json.programmers[0].firstName);//输出:Brett;

json就是一个对象了,简单吧。
不是吧这么简单。其实转变后就成为一个对象了,可以通过点语法来访问这些值了。XML靠边去。

2、本地对象做成JSON
你要是能自己拼出JSON字符串也可以,不过我们是在面向对象的世界啊,那么我们都是对象啊,到时候对象直接就可以来用了。
举一个例子:
程序代码 程序代码

import json.*;
var myObject:Object = new Object();
myObject.ab = "adfsdf";
myObject.cd = Math.random();
trace(JSON.encode( myObject ));//输出:{"ab":"adfsdf","cd":0.0599129400216043}


这样就可以给服务器了。
总结:就两个方法,JSON.decode(String),JSON.encode(Object),有这么简单的方式实现传输量小,而且简单的数据格 式,我们为什么还不用呢?
其实XML自然也有他自己的强势,当一个结构复杂的数据结构出现的时候,这个时候JSON就很难搞定了,XML就是首选了。


posted @ 2010-05-11 15:50 ACong 阅读(2081) | 评论 (0)编辑 收藏
前提当然是安装了SVN。

然后,最简单的方法是随便新建一个文件夹,然后右键-》SVN-》在此建立档案库 这样就创建好了以后所有版本存放的地方了。

然后到项目以后要工作的地方,新建文件夹,检出,检出的地址就填file:///后面加上上面说的档案库的路径,即可。


平时做的项目都是本机上调试的,可是一旦我们的swf要放到服务器上,然后访问它,这个时候出错了,我们想要看到各种输出信息,有几种方法:
1.在swf中多做几个TextField,动态输出各种输出信息。
2.通过抛出异常来找出问题。
3.远程调试swf。方法是:在发布SWF时候,发布设置那里勾选“远程调试”,然后在FlashIDE里面,点击上面的调试-》远程调试-》选择AS3.0。然后就会等待和网站的连接。这个时侯访问那个swf,然后右键就会发现多了个调试器的选项。(请确保你的播放器是装了debug版本的,如果是傲游、IE、FireFox之类的浏览器,是要安装相应的插件。)
4.有些浏览器的某些插件是可以直接就在浏览器上面trace出输出信息的。

将Flex项目(.zip格式)导入FB 3的方法:(前提是装了阿帕奇)
File-》Import-》找到那个.zip文件-》next-》随便填,待会改~~

在左边工作区看到项目了,右键-》属性-》找到Server端-》将Root folder地址填写的是你本机上阿帕奇下面新建的一个项目文件夹,Root URL则是对应于网上的地址(类似于IIS的虚拟目录中具体地址和网络地址的对应),可以填http://127.0.0.1/目录名
这样子就会将.zip生成的各个文件存放到Root folder下面,然后当你调试时,就会通过Root URL在浏览器中打开。
posted @ 2010-05-11 13:33 ACong 阅读(975) | 评论 (0)编辑 收藏
对于没有写过很多面向对象程序的人来说,TC是很难入门的,太多东西和C不同了。

好在我已经接触了很多面向对象,所以参考下别人的做法,顺带温习了下VC和STL,交了一道300分的题,拿了100分。。。

posted @ 2010-05-10 22:38 ACong 阅读(135) | 评论 (0)编辑 收藏
原来没想着能去观摩比赛的,比赛前几天,才被告知能够随大队一起去。

周六去注册报名试机和做阿里巴巴的PK,我没事做,在教练室闲着。其他高校很多人留在那里做阿里巴巴的PK,我们懒得做,跑去玩和吃雪糕了,等到钟了就去吃自助餐,吃得好饱,据郭老说,人均标准是60元。总的来说,我们不是去吃东西,我们是去学习、进步、交流的,我根本不记得我吃了七八个肉丸、十多只茶叶虾、四五块鲜嫩鸡肉、四个小蛋糕、一碟拉皮、猪骨玉米汤、红枣莲子汤、一碗豆芽猪红、牛腩、香蕉西瓜番茄若干、可乐两杯、雪碧一杯、紫番薯两块,我只记得人山人海以及阿里巴巴PK比赛的趣味性。

第二天比赛,早早过去,在教练室一边看他们比赛,一边记录下现场报告,可惜3个小时后电脑没电了,所有插座都被老师用光了~~只能看起题目来,发现我自己来做,也是只能做出3道。。。囧

很可惜的是,79名就能够拿到三等奖,良智他们队85名,主要是在K题提交了几次,或者说E题没做出来。其他队更是在120名之后~

事后评判长的题目分析是这样的:
A题:水题,全场都过。
B题:水题,仅有几支队伍没过。
C题:网络流+二分答案。
D题:
E题:右上角开始搜索。
F题:中国剩余定理变型+高精度。
G题:博弈,判断两端端点或者用SG理论。
H题:
I题:
J题:枚举、DP都行。
K题:BFS、智权的最长路径、DP都能过。
椰子的弟弟他们队伍拿到了十六名。看着场上那些拿奖的牛人,我觉得我们更应该觉得热血沸腾,想方设法超越他们。难道我们只想着看着别人在我们面前打机而看不过别人在我们面前拿奖?

我相信他们在接下来的区域赛能够表现得很好。那也是能够让学校瞩目的机会。实在不行就当是次旅行也行吧?据说最近的赛区是在武汉。

以上是我们学校的比赛总结,下面看看本次冠军队伍的总结,转自中大论坛逸仙时空:
http://argo.sysu.edu.cn/bbscon?board=ACMICPC&file=M.1273582283.A

发信人: litexavier (Xavier), 信区: ACMICPC
标  题: GDCPC 2010 Summary @ SYSU_Stellation
发信站: 逸仙时空 Yat-Sen Channel (Tue May 11 20:51:23 2010)

自blog截出来的,砍掉了一大段东西,将就着看吧。
另外已将题解剧透,有想明年做GDCPC2010的忽略此文好了。

——ANALYSIS——

按照规矩,先来说下这次比赛的简单题解:

A: 在n x n x n的盒子中,放m x m x m的木块,问最多放多少块木块。
答案应该很显然吧。

B:一开始序列S={1..N},P={},然后每次P = P + S,S删掉最小的M个元素,如此循环,直
到S={},问P中第K个元素是什么。
简单的计数问题。等差数列解之即可。

C:给出M种产品,以及每种产品的个数。给出N个检查员,每个检查员能检查给定种类中若
干产品的一个,但是每个产品只能由一个检查员检查。并且检查每个产品的时间是一样的
。问最少花费多少时间才能检查完所有产品。
构造一个流量图:如果检查员A能够检查产品B,那么在A,B间连一条流量为无穷大的边,所
有产品到汇点连一条以产品个数为流量的边。那么,如果已知最少花费时间为T,那么就从
源点连一条流量为T的边到每个检查员上。这个图的意义很明显:“所有检查员在T时间内
检查完所有产品”的充分必要条件为“该图的最大流等于产品总数”。那么,接下来只要
二分T即可。

D:给出N个点,试确定两个正方形,满足:(1)所有给定点都在某个正方形内;(2)正方
形的中心(对角线连线的交点)必须在某个给定点上;(3)最大的正方形的面积最小。

二分正方形的边长L。然后根据鬼才知道的某个单调性扫描判断出用两个长度为L的正方形
能不能满足题设。

E:杨氏矩阵上的一些操作。
做法都固定了吧。

F:给出A和B两个序列,试找出一个最大的Y和最小的X,满足X = Ai ( mod Bi * Y ),for
each i。
首先因为 X = Ai + Ki * Bi * Y = Aj + Kj * Bj * Y,于是必有 Ai = Aj ( mod (Bi,B
j)*Y ),即 (Bi,Bj)*Y | Ai-Aj。于是Y被确定下来,接下来的事情就只是中国剩余定理了


G:给定一个无向图G。问经过G中给定的X个点和Y条边的最小花费是多少。
由于X和Y很小(X+Y<16),于是一个简单状态压缩动态规划即可。注:别忘了做预处理。


H:给出N个总长度不超过300,000的关键字。并且,给出M个文本,每个文本的长度为L。对
于每个文本,求出该文本出现的关键字个数S,然后用S替代下一个文本的"0",并输出S。

经典自动机。需要注意的是要延迟处理关键字个数的统计,总之,是个细节题,要仔细分
析每步的复杂度。

I:无爱的博弈题啊。
SG值可以搞定,大概。不知道SG值是何的可以搜Game Theory这书。

J:给出N个二元组(v,c),从中选出K个,并确定顺序,使得给定函数的值最大。注意:c <
 1。
按照 v / (1-c) 排序。然后顺序就确定了,之后就是一个简单的动态规划问题了。

K:打地鼠游戏。已知地鼠出现的时间,并且规定锤子每单位时间只能移动到相邻的地洞上
,并且击打操作是不需要时间的。问最多打到几只地鼠。
简单的动态规划题目。

——????——

开场后,老样子,db从A开始,我从K开始,赵牛中间。db第一时间读完A题,并很快开始c
oding。我读完了K,算了下复杂度,刚好的样子。于是又一道水题到手了。db交A了之后,
我开始敲K。不久之后A返回Yes,然后db的B就在队列中了。敲完的K的代码没过样例,离线
debug了下,发现是初始化状态搞错了。改之,返回第二个Yes。再来db连续开了B,E,C三题
,都是很顺利的过掉了。

我下来之后,赵牛扔了D给我。这时候看了下时间——才过了一个半小时。比赛的时候还未
知这是一个大坑来着。就这样,我一直想,一直想,一直想……头脑各种混乱……

抛开这个僵尸进程不谈,我们来说赵牛。

赵牛在阅遍大半版的题目后发现了第一个看起来能做的题目——I。才推了不到一会,赵牛
很坚定的说:“我来敲I ”。I就这样accepted了。再之后看时间还有好久,我就直接把一
个看起来像是动态规划的题目J(不过有个序的问题需要证明)扔给了赵牛。他看后没等我
反应,直接上去抢机器了。不过很诡异的是,直到赵牛敲完J,还没人过这个所谓的简单题
。到赵牛刚要交时,才发现第一个accepted这题的队伍。然后,不出所料,J一次提交即返
回Yes。

因为这时我们队伍已经8题,领先第二名2题之多。所以剩下的时间就交给赵牛研究他的F。
虽然赵牛英勇无比地再次在现场推导出中国剩余定理的公式,但是难奈BigCowZhang的阴险
的数据使然,赵牛陷入了苦战。

回头看db这边。

db投出的超高速直线球三好一坏不仅起到了稳定军心的作用,同时我们也确立的巨大的罚
时上的领先优势。他下来之后,我将 H题的题意说给他看,并说了下大概做法。当然,我
相信他也是会的——毕竟雅加达那次比赛我们就栽倒在一道差不多的题目上面。在三次TL
E之后,H终于顺利返回Yes。3个小时之后的第8道题终于accepted。

然后也不知是我们太放松还是如何,我们一直坚信G是一个节点规模为100的TSP问题。于是
我便拉db来跳火坑(D 题)。

期间我们许久没出题,甚至郭老师都忍不住送食物过来了。

最后半个小时,虽然db回过头看了下G发现我们全读错题了,然则为时晚矣。赵牛的F也被
完美的卡到死。

至于D题?……(……(……))

posted @ 2010-05-10 21:33 ACong 阅读(929) | 评论 (8)编辑 收藏
已确定人员:
ACong,Lemo(已通知),小七(已通知),Jialiang(已通知),打酱油(已通知),小熊夫妇,Succeed(已通知)

全部人员最终都出席了,另外小七找多了Kuangcao加入,合计9人。


流程安排:
早上9点起床,10点在华师地铁口集合。(决定去客村好又多买烧烤的东西,结果11点30分才买完。)坐地铁三号线经过8站到达地铁市桥站B出入口下,到光明北路站(番禺)转乘番禺16路(坐10站)到大夫山森林公园总站(南门)下。(由于对光明北路的不熟悉,导致花了耽搁了30分钟)

预计11点到大夫山门口,一起去租自行车(由ACong负责租车事宜)(1点才到达大夫山,而且居然是南门~南门不是正门,我们只能坐观光车去烧烤场)
11点30分,从南门出发,开始向山上烧烤场进军(实际上是从北门坐观光车去烧烤场)
12点,到达烧烤场,开始烧烤(由于不能够预定烧烤场,所以要么早些去订场,要么晚点去)
1点,烧烤完,开始饭后慢慢骑车活动。(事实上是1点30分开始烧烤,2点30分才烧烤完)
1点30分,找到凉快又较安静的地方,开始玩三国杀(对于不玩的家属,可以让他们一起骑自行车去玩,放风筝、踢毽子、打羽毛球都可以)
4点30分,自由活动,并约好5点30分在南门集合。(事实上是从2点30分一直杀到5点,然后坐观光车回南门,再坐公交车回去)
6点一起到附近的餐厅吃饭(中午烧烤大家吃得很饱,都不想吃晚饭,回去睡觉了,我们另外组织了部分人晚上打DOTA)
7点回家。
8点到家。

本次活动总结:
1.日期定在5.3这个相对于5.1和5.2来说人较少的日子,是很正确的,而且Lemo说5.3的天气会很好,果然。

2.人员确定方面,由于我找的都是平时很玩得来的同事,所以在我打电话邀请他们的时候都很顺利,果然本次出行全程都很愉快,欢声笑语不断。不过在烧烤的时候Lemo突然说到了公司各部门的重要性问题,导致有小小不愉快,小小怪责下他。另外基本上大家都很懒,又爱耍酷,不肯提东西,尤其是Lemo,全程空手,再次怪责下。

3.一开始由于担心这些懒散的家伙放我鸽子,就没事先买好烧烤物品(而且也担心提前太久买不新鲜),结果将采购物资的任务分配下去后,买肉的小分队买了一大堆加好调料的食物~~火腿肠又买少了~不过总体来说食物刚刚够,都吃完了又很饱。在这里还是要表扬下大家的,嘿嘿。但是我由于也太就没去大夫山烧烤了,居然不知道大夫山节假日烧烤有提供烧烤物品的。。结果我们买了一堆没用到的。。。在这里记录下,他们那里提供的有:
木炭一箱+酒精一块+烧烤网一张+烧烤叉8个+一次性碗8个左右+烧烤刷2个+报纸一份+火机一个+纸巾一卷。对于8个人左右的来说,已经够用了。另外我们买的能够派上用处的有:
长牙签(用来串火腿、鸡翅膀等的,买了两包,只用了一包,因为本身买的肉串带有木枝了)、烧烤汁(两瓶,用了一瓶)、孜然粉(一瓶,用了一半,很好的调味料)、芝麻油(一瓶)、蜂蜜(一瓶,用了六分之一吧)。
经验教训+下次推荐:
8个人的话,可以租一个单炉,100元(非节假日是40元但是没送烧烤包),另外他们送一个上述的烧烤包,还是挺值的。另外自己再买:两份报纸、一卷纸巾、一包长牙签(这个还能当筷子)、8个一次性碗、一条一次性杯子、火腿肠(双汇火腿肠*2~3包,大根的那种,就是在街边看到卖烧烤的人卖的那种,不要买玉米肠和鸡肉肠)、超市里面腌制并且串好的肉串(24根~32根)、鸡翅膀(8个~12个,这个烤失败的概率较高,另外如果买的是一小块的中翅,那要小心掉进烧烤炉里面)、香菇(一盒12个左右,好吃好烤又便宜)、青菜或者尖椒等若干、孜然粉一瓶、烧烤汁一瓶、芝麻油一瓶、蜂蜜一小点(买一瓶可以用很多次了)。

4.费用合计:
9*14元(来回车费)+300元(超市买烧烤物资)+100元(租烧烤炉)+3*9*2(坐观光车)+36(中途买水)=126+300+100+29+36=591元。人均65元。由于车费大多是自己出的,所以每人需要交52元。哇塞。。这个比起唱K可是便宜多了。。。而且又健康又好玩得多,呵呵。

5.不足之处:
个人点火功夫小白、个人调料功夫小白、个人带路能力有待加强。(呃,毕竟本次走的路线是我以前没走过的,囧)

回想起来,5月2日早上,当我看到窗台照进来的第一缕阳光时,我就对自己说:天气这么好,一定要去大夫山。

结果我承担了这次活动的以下工作:
人员召集和通知、流程安排、物质清单设计、采购安排、路线安排。
由Success和Kuangcao承担了点火安排。
由Kuangcao和小熊嫂子承担了烧烤大厨工作。



posted @ 2010-05-02 19:54 ACong 阅读(342) | 评论 (0)编辑 收藏
一、素材篇
素材有三种,一种是美术提供的各种静态图片,对此我们要做的是将这些静态图片用脚本转成swf为我们所用。另一种是在Flash创作工具(IDE)中自己创建,这部分需要用到的主要是FLash CS4的知识,如时间轴、图层、遮罩、各种工具、补间、少数简单动作等等。第三种是通过用AS3的绘图API或者3D API去绘制资源,通常这种占内存最小,并且扩展性较强,但是难度较高。

获得以及对素材的加工处理工具有PhotoShop+其脚本、Flash IDE+JSFL脚本、AS3帮助文档

通过PS的记录动作可以执行一些重复性事情。另外将图片转化为png-8的,可以减少将近一半以上的资源大小,代价是图像边缘有锯齿,并且无半透明度。。

二、代码篇
代码分两种,一种是插在时间轴上,一种是独立做成类文档。前者容易写,但是扩展和管理不好。后者易于管理、扩展,逻辑清晰,但是和Flash IDE的交互不够,通常我们会通过FB等其他开发工具来弥补这一点。

编写代码的工具有Flash IDE中的Flash 文档、Flash IDE中的AS 3文档、Flash Builder 4(以前是叫做FLex Builder 3)、FDT(我用的是Eclipse)。

三、结构篇
尽量用面向设计模式的思想去组织你的模块。另外就是拥有个人的类库。(算法类库、3D类库、图形特效类库、网络通信类库、内存管理类库、文本处理类库、声音编码解码类库)。

四、内存篇
通常一个单打格斗游戏,可以做到swf只有3M左右,占内存不超过100M,而且动作相当华丽。另外还有些通过矢量图制作的Flash网页无交互游戏,能够达到接近0内存的消耗,且总资源非常小。
减少对内存的消耗有这么些方法:
1.尽量用矢量图。
2.对于图片的话,可以通过BitmapByte格式来减少它存放在内存的空间。
3.对于资源是swf的话,它对内存的消耗是这样的:每张图片长*宽*4/1024,也就是说如果你有一张1024*768的图片,尽管由于你把背景设置为透明,使得图片大小只有10K,但是通过Loader读到内存,他的大小是1024*768*4/1024约等于2.8M。增长了将近300倍。(估计原因是透明点也是会在Flash中保存的,类似于0Xff000000。)
4.防止内存泄露:当对象不再需要的时候果断置为null,每个侦听器在它该remove的时候果断remove,要删除一个对象里面的所有子对象的所有引用,才能够删除该对象,定时调用GC执行强制垃圾回收。一种方法是当需要完全删除该对象时,调用一个自定义函数rever,该函数将清空该对象的所有子对象、所有动态属性、所有侦听器。
5.没有用到的东西尽量少加载到swf中。
6.对对象进行引用时一定要想清楚。(局部变量如果被addChild到舞台,也是会占内存的)



posted @ 2010-04-22 19:17 ACong 阅读(171) | 评论 (0)编辑 收藏
PKU上面的1077是经典题目——八数码,在《人工智能》这门课中是重点的研究对象,引领前面几章的内容,可见其在搜索方面的典型性。

已知:3*3的格子,以及每个格子的数字(1~8和一个'x',两两不同),每次只能够移动x那个格子,并且只能往左右上下四个方向移动
目标:某种状态,在该题中为
            1 2 3
            4 5 6
            7 8 x
未知(所求):如何从给出的一个状态,经过一系列的移动,到达目标状态

解决问题从提出问题开始:
1.已知和未知有啥关系?
答:目标状态是由已知状态一步步移到的。
2.是否一定存在解呢?
答:从题目得知,有时候会得不到解(当仅仅只有两个数字不在原来的位置上时无解)。
3是否在以前遇到过类似的问题?
答:象棋上马的走法,从一个点到达目的点的搜索过程,因此考虑可以用类似的方法来寻找答案,也就是搜索。
4.除了搜索还有其他方法可以解决这个问题么?
答:暂时没有人发现,
5.如何搜索?
答:从起始位置开始,向四个方向尝试,一旦往一个方向尝试了,则要防止呆会又往原来的位置尝试的问题,于是除了一开始外,其他的每次最多只能往3个方向的尝试。
6.如何判断当前状态是否已经是目标状态?
答:每行每列都和目标状态的比较。

好,我于是很快的写出来一个DFS的程序(DFS不需要额外的空间,不需要记住状态到达哪里,比BFS容易写)
运行后,发现出错,通过用断点调试了一会后,处理了几个小错误后,遇到一个问题:
7.我的程序总是得不出结果。
答:因为DFS的话,你必须要确定他会到达一个终点就回溯,问题就出在我的程序不会出现无路可走的情况,因为他不会判断当前状态是否已经是之前走过的,所以会一步循环走下去,甚至明明一步就能到达目的地,他还是要走无限远的路,直到程序被迫跳出。
8.如何处理这个问题?
答:既然是因为递归的无限深度,那我们就给他一个深度极限,当到达这个深度时,就返回。接下来的问题是:
9.这个深度该是多少?
答:一个深度就代表一步,八数码的问题最多需要走多少步就一定能够到达目标呢?(注意,是一定),如果这个深度开太小了,有可能找不到解,如果这个深度开太大了,又会让程序不断递归下去。所以需要自己试验。

我先设了个100,发现可以得出结果,但是那个步数也就是100步左右(因为DFS找到的路径不是最短的,而是最靠近某一个方向的),和sample output的19步不同啊,于是我改成19步,结果出来的答案也是19步,只是和给出的不同,为了验证我的答案也是正确的,我撕了一张纸,在上面写了个八数码,并且按照我给出的步骤去走,最终确实到达目标了,可见我的算法是正确的。

10.求的不是最短步骤,能行么?
答:再次检查题目,发现并没有要求最短路径,并且题目显示是Special Judge,可见应该可以。

最终提交时,我把深度定为500(因为定为1000时我自己的程序崩溃了),居然一次性过了,花费的空间是208K,时间是 875MS,再看一个师弟的提交,空间是9816K,时间是438MS,可见DFS和BFS的区别。


然后我又分别试了下将深度改为200,350,结果都是TLE,证明一个问题:

有时候花费较长的时间一次性找到一个解,比花费较短的时间而多次找不到解,要来得快。

posted @ 2010-04-06 21:19 ACong 阅读(186) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2 

<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿

随笔档案

文章档案

广商豪杰

搜索

  •  

最新评论

阅读排行榜

评论排行榜