More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  流  浪  的  枫  之  羽PhotosProfileFriendsBlog Tools Explore the Spaces community

Blog

Blog地址转移!

此博客正式被废,尽管以前也宣布过被废,但是从今天起正式废除此博客,没有其他原因因为功能太单一!
新的博客地址:http://feng5166.com
cfdc9f67

命运呼叫转移

。。。。。。。
 

LESSWATTS.ORG开源项目介绍

LESSWATTS.ORG开源项目简介:

LESSWATTS.ORG开源社区于2007920由英特尔公司推出它用以满足从数据中心服务器到个人移动设备的整个计算环境对不断增长的更高能效的需求。该社区的项目集成于开放源代码软件中,可降低Linux服务器、PC、电子产品的能耗。地址:http://www.lesswatts.org

以下是社区中的各个开源项目的介绍:

1.      PowerTOP

介绍:

PowerTOP 是一种linux下的工具,它可以帮助你找到那些在你计算机空闲时linux内核中那些耗电的程序。在linux2.6.21的版本里,linux内核实现了空闲循环机制,不再有固定的1000HZtimer tick事件。这样的结果可以使CPU在系统空闲的时候处于长时间的低能耗状态,可以在理论上达到节省大量电的目的。然而再内核空间和用户空间中会有很多事件会破坏这种体系。

PowerTOP能通过ACPI高级配置和电源接口)把内核中的信息方便的显示在我们的显示器上使我们能观察到我们的系统在省电模式的状态下什么程序导致了我们最大的耗电。

PowerTOP想做到以下4个方面的目标:

能够很好的显示各种硬件的省电特性。

能够显示那些耗电的程序,对其耗能进行预防

帮助Linux开发者测试他们的应用程序并且帮助他们优化应用程序(能耗)

提供给你一些建议使你的应用程序能达到最少的能耗。

使用要求: 

如果想使PowerTOP工作良好,linux的内核必须实现了tickless idle(空闲循环)机制,也就是版本要再2.6.21以后。目前linux的内核只有32-bit的才支持tickless idle(空闲循环)机制,64-bits内核再v2.6.23后才能有这种特性。

PowerTOP 最好工作再笔记本电脑上,或者使最近推出的英特尔的移动处理器。当然使用PowerTOP在笔记本上时,你应该让它运行再电池模式下。

版本:

目前PowerTOP的最新的版本时1.9,支持的系统时Debian*, Gentoo and Fedora*.

代码下载地址:

http://www.lesswatts.org/projects/powertop/download/powertop-1.9.tar.gz

个人评价:这个组件目前感觉时Intel 玩具,用来节省笔记本电池用电,以后可能会发展成提高linux上笔记本用电池的工作效率。

2.      tickless idle

介绍:

传统的linux内核是为每个CPU使用周期性的计时机制,这个计时器为许多事件作为计时,比如:处理计算、负载调度、维持时间片调度任务。老的linux内核使用100HZ(10ms的计时器,新的内核的linux使用的是250HZ(4ms)1000HZ(1ms)的计时器。这个周期性的计时事件我们常常叫做“时间滴答”。这个方法设计简单,但是它有一个致命的缺陷就是时间滴答周期性的发生,不顾处理器现在正处于忙还是闲的状态。如果处理器处于闲置,它也会每隔一段周期去唤起正处于省电模式下的处理器。这样它就消耗了笔记本的电池的使用时间或者是对于服务器来说消耗不必要的电力。

目前这个项目采用tickless idle(空闲循环)的机制,Linux内核将会在CPU空闲时消除这个周期性的“时间滴答“的机制。这样的机制允许CPU在很长一段时间内始终保持在省电的模式下,降低系统的总功耗的消耗。

我们应该注意一个问题:如果CPU频繁的被一些不必要的计时事件唤起,那么空闲循环机制的优势将消失。这个项目就是整理所有的能增强处于新内核中的tickless idle特性机制的补丁(deferrable timers,以达到能尽可能长时间的利用tickless idle机制。

Deferrable timers代码下载地址:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6e453a67510a17f01b63835f18569e8c3939a38c

HDOJ1527

问题:
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

碰到这道题时我的思路:

设集合A, B分别为先手能赢和后手能赢的二元无序对(x,y)的集合

先从最基础的开始考虑,(n,0) (n,n) 属于A,因为这样的情况先手肯定能赢(n为正整数,下同)

如果存在(a,b),对于一切n,(a-n,b-n)均属于A,则(a,b)属于B
很容易找到一个(2,1),这是后手肯定能赢的情况

接下来从先手的角度分析,如果他能在移动石子后留给对手(2,1)个石子,那么他就能赢,于是
(2+n,1) (2+n,1+n) (2,1+n) 均属于 A

找出一个不属于A的最小对,(5,3), 这个元素肯定属于B集合,因为从中任意取出元素后的结果肯定属于A集合
相应的,(5+n, 3) (5, 3+n), (5+n, 3+n) 均属于A

这时发现,B集合相对A集合元素少很多,只要找出B集合中元素的特征,就能解决这个问题。

一旦B中包含(x,y)对,A中就会相应的包含(x, y+n), (x+n, y), (x+n,y+n)
由此想出一种构造B集合的方法,设当前构造出的集合为S,a为不在S中的最小的数,即
a = MIN{ x | x 不属于 (p, q), 对于一切(p, q)属于S }
则把(a, a+gap)加入B中,其中gap是当前S中所有对之差的最小值+1
 
 构造出的序列为
 (1,2) -> (3, 5) -> (4, 7) -> (6, 10)
 
 到这里这道题目应该已经能过了,不过还有一种达到O(1)的优化,接下来的就不是我想出来的了 =,=
 首先是Betty定理:
 如果无理数alpha, beta满足
 1. alpha, beta > 0
 2. 1/alpha + 1/beta = 1
 那么,序列{[alpha*n]}和{[beta*n]}构成自然数集的一个分划,其中[]是取整函数
 
 这道题对应的alpha和beta分别是(1+sqrt(5))/2,(3+sqrt(5))/2,其实是一个黄金分割

公式可以见这个博客

HDOJ2136

Problem Description
Everybody knows any number can be combined by the prime number.Now, your task is telling me what position of the largest prime factor.
The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.Specially, LPF(1) = 0.
Input
Each line will contain one integer n(0 < n < 1000000).
Output
Output the LPF(n).
Sample Input
1
2
3
4
5
Sample Output
0
1
2
1
3
http://acm.hdu.edu.cn/showproblem.php?pid=2136
算法思想:采用素数筛选法改进以符合这道题目!
memset(prime, -1, sizeof(prime));
 for(i = 2; i< MAX; i++)
 {
        if(prime[i]==-1)
  {
   num++;
   for(j = i; j < MAX; j+=i)
   {
    prime[j] = num;
   }
        }
 }

HDOJ2102

Problem Description
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
Input
输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。
Output
如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
Sample Input
1
5 5 14
S*#*.
.#...
.....
****.
...#.

..*.P
#.*..
***..
...*.
*.#..
Sample Output
YES
简单的BFS
void bfs()
{
 int i;
 while(!q.empty())q.pop();//清空队列
 start.x =0,start.y = 0,start.cnt =0,start.lever=0;
 q.push(start);
 map[0][0][0]='*';
 while(!q.empty())
 {
  tmp = q.front(); q.pop();
  x = tmp.x,y = tmp.y , cnt = tmp.cnt,lever = tmp.lever;
  if(map[lever][x][y]=='P'&&cnt<=t)
  {
   sucess = 1;
      return ;
  }
  if(map[lever][x][y]=='#')//进行时空转换
  {
   map[lever][x][y]='*';
   lever = (lever+1)%2;
   if(map[lever][x][y]=='*'||map[lever][x][y]=='#')
    continue;
   if(map[lever][x][y]=='P')
   {
    sucess = 1;
    return;
   }
   map[lever][x][y]='*';
  }
  //同一层进行处理
  for(i = 0; i<4;i++)
  {
   int a = x +dir[i][0];
   int b = y +dir[i][1];
   if(a<0||a>=m||b<0||b>=n)
    continue;
   if(cnt>=t) continue;
   if(map[lever][a][b]=='P')
   {
    sucess =1;
    return;
   }
   else if(map[lever][a][b]=='.')
   {
     map[lever][a][b]='*';
   
   } test.x = a,test.y = b,test.cnt = cnt+1,test.lever=lever;
    q.push(test);
  }
 }
 sucess = 0;
}
但是要一定分清楚换层!

解决C#"线程间操作无效: 从不是创建控件“XXXX”的线程访问

今天在继续写我的桌面搜索,因为涉及了多线程所以在VS2005下出现RT所示的问题,

百度搜索一下解决方法,

有些说用委托但是不怎么好用,发现只要设置一个属性就可以解决问题:

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

MSDN,显示该属性的有关说明如下:

访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。

.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationException,并提示消息:“从不是创建控件 control name 的线程访问它。”

此异常在调试期间和运行时的某些情况下可靠地发生。强烈建议您在显示此错误信息时修复此问题。在调试以 .NET Framework 2.0 版之前的 .NET Framework 编写的应用程序时,可能会出现此异常。

可以通过将 CheckForIllegalCrossThreadCalls 属性的值设置为 false 来禁用此异常。这会使控件以与在 Visual Studio 2003 下相同的方式运行。

讲述Lucene相关站点和书籍- -

Introduction to Text Indexing with Apache Jakarta Lucene
http://www.onjava.com/pub/a/onjava/2003/01/15/lucene.html

Advanced Text Indexing with Lucene
http://www.onjava.com/pub/a/onjava/2003/03/05/lucene.html

关于Chedong的blog(非常著名,汉语)
http://www.chedong.com/tech/lucene.html

Lucene全文检索实践
http://www.infor96.com/~nio/comments.php?id=84_0_1_0_C

关于Lucene的基本概念
http://www.cnblogs.com/lucene/archive/2004/12/20/79804.html

Lucene使用者沙龙(为Chedong和一些朋友的沙龙,有ppt和http://blog.cnblog.org/archives/2005/07/luceneaecee.html

Lucene研究之一——起源、现状及初步应用http://jalorsoft.com/holen/holen_lucene_01.html

Lucene研究之二——系统结构分析初步(已阅)
http://jalorsoft.com/holen/holen_lucene_02.html

系统讲了Lucene架构(英文)
http://www-igm.univ-mlv.fr/~dr/XPOSE2003/lucene/node1.html

Doug Cutting(Lucene作者)做的关于Lucene的架构解说
http://lucene.sourceforge.net/talks/pisa/

English StopWords列表
http://www.onjava.com/onjava/2003/01/15/examples/EnglishStopWords.txt

书籍:

Lucene in action

再贴一个笑话!~

     一夏日,酷热。
  一中年男子出差,因天晚住进一个小旅店,正要就寝突然电话响起:“对不起我是前台,我们旅店有特殊服务你需要吗?”
  “不了谢谢”,男子回答。
  放下电话后,该男子辗转反侧,难以入睡,于是抓起电话打给前台说:“给我来一个特殊服务”,不一会一年轻女郎进来。
  男子问一夜多少钱?女子说“一百”
  男子说:“好脱了吧,坐沙发上。”
  女子脱光坐在沙发上。
  男子回到床上躺下,不一会传来酣声……
  天快亮时女子再也忍受不住将男子叫醒,你叫我来干什么?
  嘿嘿!
  男子说:蚊子太多我睡不着……

有趣的IT笑话

亲爱的技术支持:
我急需您的帮助。我最近将“女朋友7.0”升级到“妻子1.0”,发现这个新程序意外地启动了孩子生产程序,而且占用了大量的空间和珍贵的资源。这在产品的使用手册中没有提到。此外“妻子1.0”自动将自己安装到其他的所有的程序中,它随系统同时启动,监控整个系统的状态。男人夜出2.5”和“高尔夫 5.3”无法再运行,一旦运行该程序系统即行崩溃。试图运行“周日足球6.3”经常失败,而“周六购物7.1”却代之运行。看来我无法保留“妻子 1.0”,因为它和我喜欢运行的任何程序都不相容。我打算回到“女朋友7.0”,可是这个程序又无法卸载。
 
回信:
亲爱的用户:
这是个很普通的问题,产生于你对基本原理的不了解。
很多的男人将“女朋友7.0”升级到“妻子1.0”,以为“妻子1.0”是一个“实用与娱乐程序”。然而“妻子1.0”却是个操作系统,是被设计用来运行所有程序的。你不可能清除“妻子1.0”,也不可能回到“女朋友7.0”,因为“妻子1.0”的设计中不具有这个功能,无论是卸载、删除或是清除已经安装在系统中的这些程序文件,都是不可能的。
有些人曾试图安装“女朋友8.0”或者“妻子2.0”,结果是产生了更多的问题(参见手册中的赡养费/孩子的养育/律师费用)。我安装过“妻子1.0”,我建议你保持现在的安装状态,妥善解决遇到的困难。
当任何错误或问题出现的时候,不论你认为是什么原因引起的,你必须运行“C:\我道歉”程序,并且避免使用“退出键”。必要时可能需要运行“C:\我道歉”多次,希望最终能使*作系统恢复到初始状态。
“妻子1.0”虽然是一个需要高保养的程序,但同时对人可能是非常有益的。充分地利用它,需要买些额外的软件比如“鲜花2.0”和“巧克力5.0”。
不要在任何情况下安装“秘书(短裙版)”,因为“妻子1.0”不支持这种程序,而且系统多数时候肯定会崩溃。

About Join in Open Source SoftWare Project

确实每个开源项目对于你所拥有的能力都没有任何要求,由于项目是有分工的,所以有很多的工作需要人来做。这样,对于不同能力的人自然会有不同的可以胜任的工作。你是一个初学者,当然有初学者可以胜任的工作。例如,项目周边的事情,更新各种项目的数据,负责简单的答疑等等。如果,你想加入进开源项目,自然应该从这里做起,慢慢熟悉项目。当你熟悉项目后,自然就比其他人有更多的优势来参与近开发工作,这时你想升级为开发人员就自然容易很多。我也清楚有很多的初学者加入前都会说:”我是初学者,可能帮不上什么忙?“但是,这恰恰错了,你是初学者那么自然就不会有很难的任务给你,因为这样的话项目就停滞了,谁也不会那么做,你自己也不愿意承担。关键点:在于你自己。加入项目后,由于各自都各自的想法或者工作,所以没有人来过问你。但是,你却可以自由的根据自己的能力来提问,而且在项目中,应该会有很多相应的文档可以浏览,或者别人的讨论可以看到,这时你就可以更加轻易的理解项目,关键点在于你自 己,是否上心,只要稍微有心就可以负责某些工作,再稍微用点心,你就会发现自己可以编写某些方面的代码。当你真的有心的话,你就可以融入项目中,这时谁也不会在意你的能力,而且项目离开了你就是一种损失,因为某些方面的工作没有人来做了。大家在同一个项目中的主要目的是为了让项目成功,对于学习大家都是赞同的,因为只有学习了,才可能更加有助于为项目的成功出力,而且谁都需要学习。但是,如果你只是学习,这里的学习仅仅是......怎么表达呢?在一旁看?或者只是询问别人某些事情?我想那根本不是学习,那只是你自己的一种幻觉,因为你根本没有学习到什么东西。你从不动手,你从不想去如何解决某些问题,你又不负责项目的任何工作,你 只是看?那和一个普通的旁人有什么区别呢?你高兴了可以来看看,不高兴就放在一边,这样也能叫做学习?再说,你没有付给任何人工资,别人又怎么能主动的来教你什么呢?所以,在开源项目中的学习就是实际的动手,实际的讨论,实际的负责,不断的在实践中学习到各种知识。

上面谈了这么多,不清楚对于初学者有没有帮助认识开源项目。

也许对于初学者来说,更加注重的是得到了什么,对于自己的付出并不在意,而开源项目似乎更加强调你付出了什么。

在我看来,其实这两点都是各自被自身的想法而扩大化了,其实参与一个开源项目,你在付出的同时你肯定得到了相当的知识与经验(这可以说是你人生的资本,如果你能声称你参与了linux内核的编写,相信你的工作之路会十分的顺畅,如果你声称参与了firef ox的编写,我想同样也不坏);而你在开源项目中,大家在帮助你的同时,也得到了你的帮助。

这样,才是一种正常的良性循环。

用C#对DBF数据库的操作

现在在弄GIS的问题,需要读取一个dbf文件,查了很多资料原来是fp的数据库文件   
   下面是所用的代码。都很简单,就是格式上要注意。和用开的查询语句会有很大不同。
不过好像对于我要用到的没啥帮助!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Odbc;
namespace readdbf
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection();
            string table = @"C:\App_Data\cities.dbf";
            string connStr = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO";

       conn.ConnectionString = connStr;
            conn.Open();
          //  OdbcCommand cmd = new OdbcCommand();
         //   cmd.Connection = conn;
         //   string sql = "update " + table + " set NAME='2' ";
         //   cmd.CommandText = sql;
         //   cmd.CommandType = CommandType.Text;
         //   cmd.ExecuteNonQuery();

           string  sql = @"select * from " + table;
            OdbcDataAdapter da = new OdbcDataAdapter(sql, conn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            this.dataGridView1.DataSource = dt.DefaultView;
        }
    }
}

启动用户实例的进程时出错(Sql Server Exoress)

我遇到了一样的问题,参考如下的解决方法。

引用

启动用户实例的进程时出错
我相信很多人在使用ASP.NET 2.0 + SQL2005 + aspnetdb(MemberShip等功能)时出现这个问题:“由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。”,其英文版本的相同问题的错误信息是:“Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed.”
我花了将近3天的时间,终于找到了答案!原来这是微软的bug,并且微软已经承认,详情如下:http://support.microsoft.com/?id=896613
出现此错误的条件是:你用过远程桌面连接,并且安装了SQL2005+VS2005,就有很大可能触发这个问题,微软说会在将来的XP SP3里面解决掉这个问题,要想立即解决这个问题,需要交费……  - -6
不用理会SB M$,咱们自有土办法来解决,请看如下文章:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=128707&SiteID=1
如果你看不懂英文,那么我告诉你我的解决办法:删除C:\Documents and Settings\[USERNAME]\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS目录即可,[USERNAME]是Windows用户名,比如说Administrator
综上所述,为了防止大家像我一样郁闷,特将我的经验公开,谢谢捧场~

DBF文件格式

1.文件头(32字节)   
   0    文件类型     
   0x02FoxBASE     
   0x03FoxBASE+/dBASE    III    PLUS,无备注     
   0x30Visual    FoxPro     
   0x43dBASE    IV    SQL    表文件,无备注     
   0x63dBASE    IV    SQL    系统文件,无备注     
   0x83FoxBASE+/dBASE    III    PLUS,有备注     
   0x8BdBASE    IV    有备注     
   0xCBdBASE    IV    SQL    表文件,有备注     
   0xF5FoxPro    2.x(或更早版本)有备注     
   0xFBFoxBASE     
   1    -    3    最近一次更新的时间(YYMMDD)     
   4    -    7    文件中的记录数目     
   8    -    9    第一个数据记录的位置     
   10    -    11    每个数据记录的长度(包括删除标记)     
   12    -    27    保留     
   28    表的标记    0x01具有    .cdx    结构的文件     
   0x02文件包含备注。     
   0x04文件是数据库(.dbc)     
   29    代码页标记   
   30    -    31    保留,包含    0x00     
   32    -    n    字段子记录     
   字段的数目决定了字段子记录的数目。表中每个字段都对应一个字段子记录。     
   n+1    头记录终止符(0x0D),n+2    到    n+264    此范围内的    263    个字节包含后链信息(相关数据库    (.dbc)    的相对路径)。如果第一个字节为    0x00,则该文件不与数据库关联。因此数据库文件本身总是包含    0x00。   
    
   2.字段描述结构(32字节)   
    
   字节    说明    备注   
   0    -    10    字段名(最多    10    个字符    -若少于    10    则用空字符    (0x00)    填充)   
   11    字段类型     
   12    -    15    记录中该字段的偏移量     
   16    字段长度(以字节为单位)     
   17    小数位数     
   18    字段标记   
   0x01系统列(用户不可见)   
   0x02可存储    null    值的列     
   0x04二进制列(只适于字符型和备注型)   
   19    -    32    保留   

————————————————————————————

dbf文件头结构和字段类型描述结构用C语言表示如下:   
    
   struct    dbf_head     
    
   {    /*    DBF文件头结构    */   
   char    vers;    /*    版本标志*/   
   unsigned    char    yy,mm,dd;    /*    最后更新年、月、日    */   
   unsigned    long    no_recs;    /*    文件包含的总记录数    */   
   unsigned    short    head_len,rec_len;    /*    文件头长度,记录长度    */   
   char    reserved[20];    /*    保留    */   
   };   
   struct    field_element   
    
   {    /*    字段描述结构    */   
   char    field_name[11];    /*    字段名称    */   
   char    field_type;    /*    字段类型    */   
   unsigned    long    offset;    /*    偏移量    */   
   unsigned    char    field_length;    /*    字段长度    */   
   unsigned    char    field_decimal;    /*    浮点数整数部分长度    */   
   char    reserved1[2];    /*    保留    */   
   char    dbaseiv_id;    /*    dBASE    IV    work    area    id    */   
   char    reserved2[10];    /*   
   char    production_index;     
   };   
    
    
    
    
   //    参考2   
   dbf    file    structure   
   ~~~~~~~~~~~~~~~~~~   
    
   bytes    description   
   00          foxbase+,    foxpro,    dbaseiii+,    dbaseiv,    no    memo    -    0x03   
   foxbase+,    dbaseiii+    with    memo    -    0x83   
           foxpro    with    memo    -    0xf5   
           dbaseiv    with    memo    -    0x8b   
           dbaseiv    with    sql    table    -    0x8e   
    
   01-03    last    update,    format    yyyymmdd    **correction:    it    is    yymmdd**   
   04-07          number    of    records    in    file    (32-bit    number)   
   08-09          number    of    bytes    in    header    (16-bit    number)   
   10-11          number    of    bytes    in    record    (16-bit    number)   
   12-13          reserved,    fill    with    0x00   
   14          dbaseiv    flag,    incomplete    transaction   
   begin    transaction    sets    it    to    0x01   
           end    transaction    or    rollback    reset    it    to    0x00   
    
   15    encryption    flag,    encrypted    0x01    else    0x00   
   changing    the    flag    does    not    encrypt    or    decrypt    the    records   
    
   16-27    dbaseiv    multi-user    environment    use   
   28          production    index    exists    -    0x01    else    0x00   
   29          dbaseiv    language    driver    id   
   30-31    reserved    fill    with    0x00   
   32-n          field    descriptor    array   
   n+1          header    record    terminator    -    0x0d   
    
   field    descriptor    array    table   
   bytes    description   
   0-10    field    name    ascii    padded    with    0x00   
   11          field    type    identifier    (see    table)   
   12-15          displacement    of    field    in    record   
   16          field    length    in    bytes   
   17          field    decimal    places   
   18-19          reserved   
   20          dbaseiv    work    area    id   
   21-30          reserved   
   31            field    is    part    of    production    index    -    0x01    else    0x00   
    
   field    identifier    table   
   ascii    description   
   c    character   
   d    date,    format    yyyymmdd   
   f    floating    point   
   g    general    -    foxpro    addition   
   l    logical,    t:t,f:f,y:y,n:n,?-not    initialized   
   m    memo    (stored    as    10    digits    representing    the    dbt    block    number)   
   n    numeric   
   p    picture    -    foxpro    addition   
    
   note    all    dbf    field    records    begin    with    a    deleted    flag    field.   
   if    record    is    deleted    -    0x2a    (asterisk)    else    0x20    (space)   
   end    of    file    is    marked    with    0x1a  

一道排列组合题目!

今天在群里师兄发了一道公务员试题:4个球放入8个编号不同的盒子,每个盒子可放0-4个,则有几种放法?
我们可以进行推广,就是m个球放入n个编号不同的盒子,每个盒子可放0-m个,则有几种放法?
解题思路1:
用递归:
1个盒子,m个球:1种方法
2个盒子,m个球:分别有(0,m)   (1,m-1)   (2,m-2)...(4,0)   共m+1种方法
设n个盒子,m个球有f(n,m)种放置方法,现取第1个盒子的球数分别为0,1,2,.,i,..m   ,对于这m+1种情况中的第i种情况,有f(n-1,m-i)个含n-1个元素的字符串数组
全部拼起来即可
 
解题思路2:
/*这其实是一个n进制数的问题
假定存在一个m位的n进制数,他的k位上的数字表示第k个球所在盒子的编号,可以证明这个m位的n进制数和盒子的排列是一一对应的 我们知道,对于这种题目,可能的组合数为n^m,那么你只要把0- >n^m-1的数转换成n进制数,再检查对应的每位数既可知道每个球所在的盒子 所以唯一的难点就是整数转换成n进制数的问题,这个好像不是难题哦,学过计组的都应该知道除余法 也就是对于整数x,   x%n表示n进制数个位上的数字,要求更高位的数字,要用x=   x/n迭代*/
递归的程序实现:
#include <cstdlib>
#include <iostream>
using namespace std;
int   *a;
int   n;
int cnt =0;
void  f( int len, int sum ){
      int  i;
      if( sum==0 ){
          for( i=0; i<len; ++i )
               cout<<a[i]<<" ";
          for( ; i<n; ++i )
               cout<<0<<" ";
          cout<<endl;
    cnt++;
          return;
      }
      if( len==n-1 )
   {
          a[len]=sum;
          for( i=0; i<=len; ++i )
               cout<<a[i]<<" ";
          cout<<endl;
     cnt++;
          return;
      }
      for( i=0; i<=sum; ++i ){
           a[len]=i;
           f( len+1, sum-i );
      }
}
int main( )
{
    int  m;
   while(cin>>m>>n)
   {
 cnt = 0;
    a=new int[n];
    f( 0, m );
 cout<<cnt<<endl;
    delete a;
   }
    return 0;
}
 
 

第32届ACM亚洲预赛蓉城赛区传来捷报 我校学生摘取金牌

 11月18日,在第32届国际大学生程序设计竞赛亚洲预赛成都赛区决赛中,我校计算机学院学生林乐、徐海东与理学院学生赖力组成的参赛队发挥出色,最终以高校排名第4位的优异成绩获得金牌,参赛成绩位列浙江省高校之首。
    本届竞赛,共有经过预选赛后产生的89支代表队的267名学生进军成都赛区,可谓强队聚首,高手相逢,高校排名前3位的分别是北京大学、复旦大学、清华大学、中山大学,其中复旦和清华并列第二。
    本届竞赛,我校参赛队在指导教师总教练刘春英的带领下,此前已多有斩获,分别获得长春赛区银牌1枚、北京赛区银牌与铜牌各1枚、南京赛区铜牌1枚。我校在本届ACM竞赛中刷新记录,实现摘取金牌的零的突破,令竞赛组办部门、高校界以及计算机界刮目相看。
    我校自2003年9月开始组织学生参加大学生程序设计竞赛,并从2004年起在全校范围内挑选优秀学生组成ACM集训队,由专业指导教师实施备战训练。此外,计算机学院还于2005年针对该项赛事设计了每年举行6次月赛(其中含2次校级比赛)的竞赛制度,在学生中广泛普及ACM知识,训练学生利用计算机分析问题、解决问题的能力,全面提高学生程序设计水平,同时也为ACM集训队输送源源不竭的优秀选手。据统计,每年参加该项赛事的学生近2000人次。(教务处、计算机学院)