posts - 403, comments - 310, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

     摘要: 本来想练习了下deque的使用。用BFS,每个结点都记录了到目前为止转动的情况。结果发现内存消耗很大,就只好用DFS了。 /**//*PROG: clocksID: 06301031LANG: C++*/#include <iostream>#include <fstream>#include <deq...  阅读全文

posted @ 2007-05-30 21:34 ZelluX 阅读(762) | 评论 (0)编辑 收藏

1. 最近用Dev C++写的几个程序中,最容易出错的就是忘记初始化和数组越界。C++(至少在Dev C++编译器中)并没有像Java那样严格的纠错功能,因此要格外小心。

2. C++ Programming Language上的一个样例程序,能看懂,但不能吃透。

 

#include <iostream>
#include 
<vector>
#include 
<string>
#include 
<fstream>
#include 
<iterator>

using namespace std;

int main() {
    ifstream fin(
"p61.in");
    istream_iterator
<string> ii(fin);
    istream_iterator
<string> eos;
 
    vector
<string> b(ii, eos);
 
    ostream_iterator
<string> oo(cout, "\n");
 
    unique_copy(b.begin(), b.end(), oo);
 
    system(
"PAUSE");
}


3. 向函数传递二维指针
void f(int a[][4]) 或者 void f(int (*a2)[4])

posted @ 2007-05-30 20:14 ZelluX 阅读(332) | 评论 (0)编辑 收藏

都是最近做usaco时碰到的问题
1. string转int, double
atoi(str.c_str())
atod(str.c_str())

2. std库里已经有swap方法了,难怪我写了以后反应ambiguous method


posted @ 2007-05-27 19:56 ZelluX 阅读(298) | 评论 (0)编辑 收藏

命令行运行sqlcmd时提示

HResult 0x7E,级别 16,状态 1
VIA 提供程序: 找不到指定的模块。

Sqlcmd: 错误: Microsoft SQL Native Client : 建立到服务器的连接时发生错误。连接到
 SQL Server 2005 时,默认设置 SQL Server 不允许远程连接这个事实可能会导致失败。

Sqlcmd: 错误: Microsoft SQL Native Client : 登录超时已过期。


google了半天,把VIA, Named Pipes, TCP/IP协议都开启后,还是无法找到。
终于在http://eternity8.bokee.com/viewdiary.13643204.html里找到了解决方法

SQL Server Configuration Manager -> 网络配置 -> 协议

tcp/ip属性
保持活动状态 --> 30000
全部侦听     --> 否
无延迟       --> 否
已启用       --> 是

IP地址
IP地址      --> 你的IP
TCP动态端口 --> 不填
TCP端口     --> 1433
活动        --> 是
已启用      --> 是

posted @ 2007-05-26 22:16 ZelluX 阅读(2019) | 评论 (0)编辑 收藏

题目都不难,都是一看就知道怎么做的,一道模拟,一道深度优先搜索,一道简化了的拓扑排序(其实也谈不上),一道动态规划。
但是手实在是太生疏了,甚至连C(n,m)该如何计算都要回忆一下。。。sigh,加上电脑有问题等客观因素,最后只做出两题。
这东西不做不行啊,赛前几天一定要练下。

posted @ 2007-05-22 19:44 ZelluX 阅读(234) | 评论 (0)编辑 收藏

  Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:

1、 Loggers

    Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。

Java程序举例来说:

//建立Logger的一个实例,命名为“com.foo”

Logger  logger = Logger.getLogger("com.foo");

//设置logger的级别。通常不在程序中设置logger的级别。一般在配置文件中设置。

logger.setLevel(Level.INFO);

Logger barlogger = Logger.getLogger("com.foo.Bar");

//下面这个请求可用,因为WARN >= INFO

logger.warn("Low fuel level.");

//下面这个请求不可用,因为DEBUG < INFO

logger.debug("Starting search for nearest gas station.");

//命名为“com.foo.bar”的实例barlogger会继承实例“com.foo”的级别。因此,下面这个请求可用,因为INFO >= INFO

barlogger.info("Located nearest gas station.");

//下面这个请求不可用,因为DEBUG < INFO

barlogger.debug("Exiting gas station search"); 

这里“是否可用”的意思是能否输出Logger信息。 

    在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名字。一般情况下建议以类的所在位置来命名Logger实例,这是目前来讲比较有效的Logger命名方式。这样可以使得每个类建立自己的日志信息,便于管理。比如:

static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());

2、 Appenders

    禁用与使用日志请求只是Log4j其中的一个小小的地方,Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。

其语法表示为:

org.apache.log4j.ConsoleAppender(控制台),


org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

配置时使用方式为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN

这样就为日志的输出提供了相当大的便利。

3、 Layouts

    有时用户希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。

其语法表示为:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

配置时使用方式为:

     log4j.appender.appenderName.layout =       fully.qualified.name.of.layout.class
     log4j.appender.appenderName.layout.option1 = value1
     …
     log4j.appender.appenderName.layout.option = valueN
 
    以上是从原理方面说明Log4j的使用方法,在具体Java编程使用Log4j可以参照以下示例:
1、 建立Logger实例:
    语法表示:public static Logger getLogger( String name)
    实际使用:static Logger logger = Logger.getLogger   (ServerWithLog4j.class.getName ()) ;
2、 读取配置文件:
    获得了Logger的实例之后,接下来将配置Log4j使用环境:
    语法表示:
    BasicConfigurator.configure():自动快速地使用缺省Log4j环境。
    PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。
    DOMConfigurator.configure(String filename):读取XML形式的配置文件。
    实际使用:PropertyConfigurator.configure("ServerWithLog4j.properties");
3、 插入日志信息
    完成了以上连个步骤以后,下面就可以按日志的不同级别插入到你要记录日志的任何地方了。
    语法表示:
    Logger.debug(Object message);
    Logger.info(Object message);
    Logger.warn(Object message);
    Logger.error(Object message);
    实际使用:logger.info("ServerSocket before accept: " + server);
 
    在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用,具体如下:
1、 配置根Logger,其语法为:
    log4j.rootLogger = [ level ] , appenderName, appenderName, …
这里level指Logger的优先级,appenderName是日志信息的输出地,可以同时指定多个输出地。如:log4j.rootLogger= INFO,A1,A2
2、 配置日志信息输出目的地,其语法为:
    log4j.appender.appenderName = fully.qualified.name.of.appender.class
    可以指定上面所述五个目的地中的一个。
3、 配置日志信息的格式,其语法为:
    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
    这里上面三个步骤是对前面Log4j组件说明的一个简化;下面给出一个具体配置例子,在程序中可以参照执行:
    log4j.rootLogger=INFO,A1
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=
                                        %-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
    这里需要说明的就是日志信息格式中几个符号所代表的含义:
    -X号: X信息输出时左对齐;
    %p: 日志信息级别
    %d{}: 日志信息产生时间
    %c: 日志信息所在地(类名)
    %m: 产生的日志具体信息
    %n: 输出日志信息换行
 
根据上面的日志格式,某一个程序的输出结果如下:
0    INFO  2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT

posted @ 2007-05-20 19:24 ZelluX 阅读(374) | 评论 (0)编辑 收藏

5.19
第一反应觉得是个简单的BFS,从最高点开始向四周扩展,最后找到最长的路径即可。
结果Wrong Answer,仔细一想,才意识到并不一定是从最高点开始的。考虑得太不周到了。。

5.31
原来的程序找不到了。。。重新写了一遍,居然写好提交就AC了,恩。这几天进步挺大哈

#include <iostream>
#include 
<fstream>
#include 
<algorithm>
#include 
<vector>

using namespace std;

const int MAX_HEIGHT = 10000;
const int MAX_ROWS = 100;
const int dx[] = {00-11};
const int dy[] = {1-100};

struct Point {
    
int x;
    
int y;
    
int height;
}
;

bool comparePoints(const Point& p1, const Point& p2);
int main() {
    
//ifstream fin("pku1088.in");
    int c, r;
    
int i, j;
    cin 
>> r >> c;
    
int h[MAX_ROWS + 2][MAX_ROWS + 2];
    
int count = 0;
    vector
<Point> points;
    
for (i = 1; i <= r; i++{
        
for (j = 1; j <= c; j++{
            cin 
>> h[i][j];
            Point temp;
            temp.x 
= i;
            temp.y 
= j;
            temp.height 
= h[i][j];
            points.push_back(temp);
        }

    }


    sort(points.begin(), points.end(), comparePoints);
    
    
for (i = 0; i <= c; i++{
        h[
0][i] = MAX_HEIGHT + 1;
        h[r 
+ 1][i] = MAX_HEIGHT + 1;
    }

    
for (i = 0; i <= r; i++{
        h[i][
0= MAX_HEIGHT + 1;
        h[i][c 
+ 1= MAX_HEIGHT + 1;
    }


    
int f[MAX_ROWS + 1][MAX_ROWS + 1];
    
for (i = 1; i <= r; i++{
        
for (int j = 1; j <= c; j++{
            f[i][j] 
= 1;
        }

    }

    
    vector
<Point>::iterator iter;
    
for (iter = points.begin(); iter != points.end(); iter++{
        
for (i = 0; i < 4; i++{
            
int nx = iter->+ dx[i];
            
int ny = iter->+ dy[i];
            
if (iter->height > h[nx][ny]) {
                
if (f[iter->x][iter->y] + 1 > f[nx][ny]) {
                    f[nx][ny] 
= f[iter->x][iter->y] + 1;
                }

            }

        }

    }


    
int best = 0;
    
for (i = 1; i <= r; i++{
        
for (j = 1; j <= c; j++{
            
if (f[i][j] > best) {
                best 
= f[i][j];
            }

        }

    }

    cout 
<< best << endl;
    
return 0;
}


bool comparePoints(const Point& p1, const Point& p2) {
    
return (p1.height > p2.height);
}

posted @ 2007-05-19 22:19 ZelluX 阅读(377) | 评论 (0)编辑 收藏

1. 数据库乱码
使用EMS SQL Manager for MySQL可以容易地解决这个问题,在table的属性对话框中将Character Set设为GBK即可。

2. Ajax应用中Servlet返回内容乱码
设置响应报头的编码即可
response.setHeader("Content-Type", "text/html;charset=GB2312");

3. JSP页面显示乱码
在页面开头加上
<%@ page pageEncoding="GBK"%>

4. request.getParameter产生乱码
用post方法只要在获取参数前设置编码即可
request.setCharacterEncoding("GBK");
get方法还需要在获取参数后转换编码
name = new String(name.getBytes("ISO8859-1"), "GBK");

5. google到的另一个解决方法,不过貌似不成功 -,-
package filter;

import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;

public class EncodingFilter implements Filter {
  
protected FilterConfig filterConfig;

  
protected String encodingName;

  
protected boolean enable;

  
public EncodingFilter() {
    
this.encodingName = "UTF-8";
    
this.enable = false;
  }


  
public void init(FilterConfig filterConfig) throws ServletException {
    
this.filterConfig = filterConfig;
    loadConfigParams();
  }


  
private void loadConfigParams() {
    
this.encodingName = this.filterConfig.getInitParameter("encoding");
    String strIgnoreFlag 
= this.filterConfig.getInitParameter("enable");
    
if (strIgnoreFlag.equalsIgnoreCase("true")) {
      
this.enable = true;
    }
 else {
      
this.enable = false;
    }

  }


  
public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) 
throws IOException, ServletException {
    
if (this.enable) {
      request.setCharacterEncoding(
this.encodingName);
    }

    chain.doFilter(request, response);
  }


  
public void destroy() {
  }

}
web.xml
 <filter>
    
<filter-name>EncodingFilter</filter-name>
    
<filter-class>filter.EncodingFilter</filter-class>
    
<init-param>
      
<param-name>encoding</param-name>
      
<param-value>UTF-8</param-value>
    
</init-param>
    
<init-param>
      
<param-name>enable</param-name>
      
<param-value>true</param-value>
    
</init-param>
  
</filter>
  
<filter-mapping>
    
<filter-name>EncodingFilter</filter-name>
    
<url-pattern>/user/*</url-pattern>
  
</filter-mapping>
  
<filter-mapping>
    
<filter-name>EncodingFilter</filter-name>
    
<url-pattern>/manager/*</url-pattern>
  
</filter-mapping>  
  

posted @ 2007-05-15 19:38 ZelluX 阅读(353) | 评论 (0)编辑 收藏

1. Filter 挺好用的。访问session时要把参数向下转型为HttpServletRequest

beans.User user = (beans.User) ((HttpServletRequest)arg0).getSession().getAttribute("user");

2. 基本完成了,有空的话,准备增加一点功能
a) 乱码问题解决
b) 新增书目时上传图片功能
c) 删除图书、分类功能
d) 购物车计算、提交更改后使用Ajax,做到不刷新界面。

posted @ 2007-05-15 19:11 ZelluX 阅读(250) | 评论 (0)编辑 收藏

CSS hack是指我们为了兼容各浏览器,而使用的特别的css定义技巧。

例如
          #example {}  /*  Firefox */
* html #example {}  /*  IE6     */
*+html #example {}  /*  IE7     */
这段代码能够让不同的浏览器使用不同的样式

posted @ 2007-05-14 11:17 ZelluX 阅读(322) | 评论 (0)编辑 收藏

仅列出标题
共39页: First 上一页 24 25 26 27 28 29 30 31 32 下一页 Last