response和request中的cookie用法
http://shashoutian2005.blog.163.com/blog/static/16854152009619104557857/什么是Cookies?Cookies是数据包,可以让网页具有记忆功能,在某台电脑上记忆一定的信息。Cookies的工作原理是,第一次由服务器端写入到客户端的系统中。以后每次访问这个网页,都是先由客户端将Cookies发送到服务器端,再由服务器端进行判断,然后再产生HTML代码返回给客户端,这是一个很重要的原理。关于服务器端和客户端的概念,请点击我写的这篇:什么是服务器端和客户端,举了2个实例。
Cookies在ASP中的最常用的方法,请做好笔记:
1.如何写入Cookies?
Response.Cookies("字段名")=变量或字符串,例如:
Response.Cookies("name2")="Dingdang"
2.如何设置Cookies时间?
Response.Cookies("字段名").expires=时间函数+N,例如:
Response.Cookies("name2").expires=date+1,表示Cookies保存1天,再比如:
Response.Cookies("name2").expires=Hour+8,表示Cookies保存8小时。
3.在以往的ASP教程中,很少有介绍Cookies退出的方法。在“退出”这个ASP页中可以这样写:
Response.Cookies("字段名")=""
之后,在客户端的浏览器就清除了Cookies,并且Cookies文件会消失。注意有多少个字段,就要写多少句来清除。
4.如何读取Cookies?
变量名=Request.Cookies("字段名"),例如:
name2=Request.Cookies("name2")
如果网页中写入<%=name2%>这句,则会显示“Dingdang”。
也可以这样直接读取Cookies,<%=Request.Cookies("name2")%>
Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源;而“Session”则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies
posted @
2011-03-23 11:15 雪黛依梦 阅读(186) |
评论 (0) |
编辑 收藏
HTML 学习网站 http://www.zhongguosou.com/html/html_meta.html
http://www.chinahtml.com/0602/xhtml-11393917823377.html
posted @
2011-03-21 21:17 雪黛依梦 阅读(143) |
评论 (0) |
编辑 收藏
Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3)。我们平时所见的Floyd算法的一般形式如下:
1 void Floyd(){
2 int i,j,k;
3 for(k=1;k<=n;k++)
4 for(i=1;i<=n;i++)
5 for(j=1;j<=n;j++)
6 if(dist[i][k]+dist[k][j]<dist[i][j])
7 dist[i][j]=dist[i][k]+dist[k][j];
8 }
注意下第6行这个地方,如果dist[i][k]或者dist[k][j]不存在,程序中用一个很大的数代替。最好写成if(dist[i][k]!=INF && dist[k][j]!=INF && dist[i][k]+dist[k][j]<dist[i][j]),从而防止溢出所造成的错误。
上面这个形式的算法其实是Floyd算法的精简版,而真正的Floyd算法是一种基于DP(Dynamic Programming)的最短路径算法。
设图G中n 个顶点的编号为1到n。令c [i, j, k]表示从i 到j 的最短路径的长度,其中k 表示该路径中的最大顶点,也就是说c[i,j,k]这条最短路径所通过的中间顶点最大不超过k。因此,如果G中包含边<i, j>,则c[i, j, 0] =边<i, j> 的长度;若i= j ,则c[i,j,0]=0;如果G中不包含边<i, j>,则c (i, j, 0)= +∞。c[i, j, n] 则是从i 到j 的最短路径的长度。
对于任意的k>0,通过分析可以得到:中间顶点不超过k 的i 到j 的最短路径有两种可能:该路径含或不含中间顶点k。若不含,则该路径长度应为c[i, j, k-1],否则长度为 c[i, k, k-1] +c [k, j, k-1]。c[i, j, k]可取两者中的最小值。
状态转移方程:c[i, j, k]=min{c[i, j, k-1], c [i, k, k-1]+c [k, j, k-1]},k>0。
这样,问题便具有了最优子结构性质,可以用动态规划方法来求解。
为了进一步理解,观察上面这个有向图:若k=0, 1, 2, 3,则c[1,3,k]= +∞;c[1,3,4]= 28;若k = 5, 6, 7,则c [1,3,k] = 10;若k=8, 9, 10,则c[1,3,k] = 9。因此1到3的最短路径长度为9。
下面通过程序来分析这一DP过程,对应上面给出的有向图:
1 #include <iostream>
2 using namespace std;
3
4 const int INF = 100000;
5 int n=10,map[11][11],dist[11][11][11];
6 void init(){
7 int i,j;
8 for(i=1;i<=n;i++)
9 for(j=1;j<=n;j++)
10 map[i][j]=(i==j)?0:INF;
11 map[1][2]=2,map[1][4]=20,map[2][5]=1;
12 map[3][1]=3,map[4][3]=8,map[4][6]=6;
13 map[4][7]=4,map[5][3]=7,map[5][8]=3;
14 map[6][3]=1,map[7][8]=1,map[8][6]=2;
15 map[8][10]=2,map[9][7]=2,map[10][9]=1;
16 }
17 void floyd_dp(){
18 int i,j,k;
19 for(i=1;i<=n;i++)
20 for(j=1;j<=n;j++)
21 dist[i][j][0]=map[i][j];
22 for(k=1;k<=n;k++)
23 for(i=1;i<=n;i++)
24 for(j=1;j<=n;j++){
25 dist[i][j][k]=dist[i][j][k-1];
26 if(dist[i][k][k-1]+dist[k][j][k-1]<dist[i][j][k])
27 dist[i][j][k]=dist[i][k][k-1]+dist[k][j][k-1];
28 }
29 }
30 int main(){
31 int k,u,v;
32 init();
33 floyd_dp();
34 while(cin>>u>>v,u||v){
35 for(k=0;k<=n;k++){
36 if(dist[u][v][k]==INF) cout<<"+∞"<<endl;
37 else cout<<dist[u][v][k]<<endl;
38 }
39 }
40 return 0;
41 }
输入 1 3
输出 +∞
+∞
+∞
+∞
28
10
10
10
9
9
9
Floyd-Warshall算法不仅能求出任意2点间的最短路径,还可以保存最短路径上经过的节点。下面用精简版的Floyd算法实现这一过程,程序中的图依然对应上面的有向图。
1 #include <iostream>
2 using namespace std;
3
4 const int INF = 100000;
5 int n=10,path[11][11],dist[11][11],map[11][11];
6 void init(){
7 int i,j;
8 for(i=1;i<=n;i++)
9 for(j=1;j<=n;j++)
10 map[i][j]=(i==j)?0:INF;
11 map[1][2]=2,map[1][4]=20,map[2][5]=1;
12 map[3][1]=3,map[4][3]=8,map[4][6]=6;
13 map[4][7]=4,map[5][3]=7,map[5][8]=3;
14 map[6][3]=1,map[7][8]=1,map[8][6]=2;
15 map[8][10]=2,map[9][7]=2,map[10][9]=1;
16 }
17 void floyd(){
18 int i,j,k;
19 for(i=1;i<=n;i++)
20 for(j=1;j<=n;j++)
21 dist[i][j]=map[i][j],path[i][j]=0;
22 for(k=1;k<=n;k++)
23 for(i=1;i<=n;i++)
24 for(j=1;j<=n;j++)
25 if(dist[i][k]+dist[k][j]<dist[i][j])
26 dist[i][j]=dist[i][k]+dist[k][j],path[i][j]=k;
27 }
28 void output(int i,int j){
29 if(i==j) return;
30 if(path[i][j]==0) cout<<j<<' ';
31 else{
32 output(i,path[i][j]);
33 output(path[i][j],j);
34 }
35 }
36 int main(){
37 int u,v;
38 init();
39 floyd();
40 while(cin>>u>>v,u||v){
41 if(dist[u][v]==INF) cout<<"No path"<<endl;
42 else{
43 cout<<u<<' ';
44 output(u,v);
45 cout<<endl;
46 }
47 }
48 return 0;
49 }
输入 1 3
输出 1 2 5 8 6 3
posted @
2011-03-10 16:37 雪黛依梦 阅读(12855) |
评论 (0) |
编辑 收藏
http://blog.sina.com.cn/s/blog_5368ef9a01009ll7.html
posted @
2010-11-25 21:19 雪黛依梦 阅读(108) |
评论 (0) |
编辑 收藏
http://baike.baidu.com/taglist?tag=%CA%FD%BE%DD%BD%E1%B9%B9&tagfromview
posted @
2010-11-11 21:00 雪黛依梦 阅读(125) |
评论 (0) |
编辑 收藏
http://www.cnblogs.com/DiaoCow/archive/2010/04/19/1715337.html http://baiyun.me/category/acm/data-struct/trie-tree/
搜索字典项目的方法为:
(1) 从根结点开始一次搜索;
(2) 取得要查找关键词的第一个字母,并根据该字母选择对应的子树并转到该子树继续进行检索;
(3) 在相应的子树上,取得要查找关键词的第二个字母,并进一步选择对应的子树进行检索。
(4) 迭代过程……
(5) 在某个结点处,关键词的所有字母已被取出,则读取附在该结点上的信息,即完成查找。
posted @
2010-11-11 20:39 雪黛依梦 阅读(311) |
评论 (0) |
编辑 收藏
//解题思路:求一个数最右边的一位数,即%10,
//故:N^N 的最右边的一位数是( N^N ) % 10,根据同余定理= (N % 10)^N
//通过观察由 1 - 9的 N 次幂容易找出相应的规律,
#include <iostream>
#include <algorithm>
using namespace std;
#include <stdlib.h>
int main ()
{
int t;
scanf ("%d", &t);
while ( t -- )
{
int n, a;
scanf ("%d", &n);
a = n % 10;
if ( a == 0 )
printf ("%d\n", 0);
else if ( a == 1 )
printf ("%d\n", 1);
else if ( a == 5 )
printf ("%d\n", 5);
else if ( a == 6 )
printf ("%d\n", 6);
else if ( a == 2 )
{
if ( n % 4 == 0 )
printf ("%d\n", 6);
else if ( n % 4 == 1 )
printf ("%d\n", 2);
else if ( n % 4 == 2 )
printf ("%d\n", 4);
else if ( n % 4 == 3 )
printf ("%d\n", 8);
}
else if ( a == 3 )
{
if ( n % 4 == 0 )
printf ("%d\n", 1);
else if ( n % 4 == 1 )
printf ("%d\n", 3);
else if ( n % 4 == 2 )
printf ("%d\n", 9);
else if ( n % 4 == 3 )
printf ("%d\n", 7);
}
else if ( a == 4 )
{
if ( n % 2 == 0 )
printf ("%d\n", 6);
else if ( n % 2 == 1 )
printf ("%d\n", 4);
}
else if ( a == 7 )
{
if ( n % 4 == 0 )
printf ("%d\n", 1);
else if ( n % 4 == 1 )
printf ("%d\n", 7);
else if ( n % 4 == 2 )
printf ("%d\n", 9);
else if ( n % 4 == 3 )
printf ("%d\n", 3);
}
else if ( a == 8 )
{
if ( n % 4 == 0 )
printf ("%d\n", 6);
else if ( n % 4 == 1 )
printf ("%d\n", 8);
else if ( n % 4 == 2 )
printf ("%d\n", 4);
else if ( n % 4 == 3 )
printf ("%d\n", 2);
}
else if ( a == 9 )
{
if ( n % 2 == 0 )
printf ("%d\n", 1);
else if ( n % 2 == 1 )
printf ("%d\n", 9);
}
}
system ("pause");
return 0;
}
posted @
2010-09-11 22:00 雪黛依梦 阅读(515) |
评论 (0) |
编辑 收藏
//重在理解方法:每次找到最小的 2 3 5 7 的因子数,之后利用所存数的下标的关系改变
#include <iostream>
using namespace std;
int num[5843]; //存储前5842个丑数
int find_min ( int a, int b, int c, int d )
{
int temp = a < b ? a : b;
int index = c < d ? c : d;
return temp < index ? temp : index;
}
void solve ( )
{
int i1, i2, i3, i4, i;
int h1, h2, h3, h4;
i1 = i2 = i3 = i4 = 1;
num[1] = 1;
for (i = 2; i < 5843; i ++ )
{
h1 = num[i1] * 2;
h2 = num[i2] * 3;
h3 = num[i3] * 5;
h4 = num[i4] * 7;
int min = find_min ( h1, h2, h3, h4 );
num[i] = min;
//易错点:这里不可以用else if 因为ti中可能会有相同的最小值,如当:min = 6 时
if ( min == h1 )
i1 ++;
if ( min == h2 )
i2 ++;
if ( min == h3 )
i3 ++;
if ( min == h4 )
i4 ++;
}
}
int main ()
{
solve ();
int n;
while ( scanf ("%d", &n), n )
{
if ( n % 100 != 11 && n % 10 == 1 )
printf ("The %dst humble number is %d.\n", n, num[n]);
else if ( n % 100 != 12 && n % 10 == 2 )
printf ("The %dnd humble number is %d.\n", n, num[n]);
else if ( n % 100 != 13 && n % 10 == 3 )
printf ("The %drd humble number is %d.\n", n, num[n]);
else
printf ("The %dth humble number is %d.\n", n, num[n]);
}
//system ("pause");
return 0;
}
posted @
2010-09-11 20:56 雪黛依梦 阅读(561) |
评论 (0) |
编辑 收藏
一个水题可是错了好几次,原因就是在scanf n 时输入的格式错了,应该是:%lf
//思路:首先是通过打表找到当长度取 0.01到5.20之间的数时,最多要多少张card,
//然后将张数存到length中用下表i表示张数
#include <iostream>
#include <algorithm>
using namespace std;
#include <stdlib.h>
int main ()
{
double length[300];
memset ( length, 0, sizeof(length));
for ( int i = 1; i <= 300; i ++)
{
for (int j = 1; j <= i; j ++)
{
length[i] += 1.0 / ( j + 1 );
}
//printf ("%d %.2f\n", i, length[i]);
}
double n;
while ( scanf ("%lf", &n) && n != 0.00 ) {
for ( int i = 1;i <= 300; i ++ )
{
if ( n <= length[i] )
{
printf ("%d card(s)\n", i);
break;
}
}
}
system ("pause");
return 0;
}
posted @
2010-09-07 21:04 雪黛依梦 阅读(327) |
评论 (0) |
编辑 收藏
一水题也被我WA 了好几次哦!就是开头的那个必须是START
所以必须多加一个strcmp ( first, ''START'')
#include <iostream>
#include <algorithm>
using namespace std;
int main ()
{
char first[11];
char last[8];
char str[201];
while ( scanf ("%s", &first) && strcmp( first, "EDNOFINPUT") && !strcmp (first, "START") )
{
getchar ();
int len = 0;
while ( (str[len] = getchar ()) != '\n')
len ++;
for ( int i = 0; i < len; i ++ )
{
if ( str[i] >= 'A' && str[i] <= 'E')
{
printf ("%c", str[i] + 21);
}
else if ( str[i] >= 'F' && str[i] <= 'Z')
{
printf ("%c", str[i] - 5);
}
else
printf ("%c", str[i]);
}
printf ("\n");
scanf ("%s", last);
}
//system ("pause");
return 0;
}
posted @
2010-09-07 11:02 雪黛依梦 阅读(372) |
评论 (0) |
编辑 收藏