09-07-2013 0 条评论

其实盖子已经开发了一个功能更强大的版本,但是那个版本依然基于正方系统,也就是说只要正方系统跪了或者张院士在网站上做点手脚,这个小工具就会失效。

今天给大家的版本虽然功能及其简单、界面极端丑陋,但是通过课程助理的接口,无需通过正方系统,直接获取大家的成绩。

你只要提供你的学号和生日即可查询成绩,简单快速。

绿色程序,需要.net framwork 2.0支持,没有环境的同学可以在这里下载:http://search.microsoft.com/zh-cn/DownloadResults.aspx?q=Microsoft+.NET+Framework+2.0

课程助理:http://pan.baidu.com/share/link?shareid=933945023&uk=3976574500

最后,课程助理 For iOS已经在App Store上架,欢迎下载:https://itunes.apple.com/cn/app/id659541624?mt=8

16-05-2013 1 条评论

本文的前提是你已经熟悉Json,如果您还不知道什么是Json是什么,请自行查看维基百科

一、Json.Net是什么?

  Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换。

  点击下载

二、为什么使用Json.Net?

我们知道在.Net中内置了读写Json的对象(DataContractJsonSerializer,JavaScriptSerializer),为什么我们还要用Json.Net呢?

在功能上:

特性 Json.Net DataContractJsonSerializer JavaScriptSerializer
Json 支持 支持 支持
Bson 支持 不支持 不支持
Json Schema 支持 不支持 不支持
.Net 2.0 支持 不支持 不支持
.Net 3.5 支持 支持 支持
.Net 4.0 支持 支持 支持
Silverlight 支持 支持 不支持
Windows Phone 支持 支持 不支持
Windows 8 Metro 支持 支持 不支持
Linq to Json 支持 不支持 不支持
Indented Json(有换行格式的Json) 支持 不支持 不支持
Json和XML转换 支持 不支持 不支持
序列化DataTable和DataSet 支持 不支持 不支持
序列化Entity Framework 支持 不支持 不支持

在性能上:

三、简单实例

以下就json常用的方法给大家做一个简单的例子:

JavaScriptConvert.SerializeObject:将对象转换为josn字符串

 Productproduct =newProduct();


product.Name ="Apple";
product.Expiry =newDateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes =newstring[] {"Small","Medium","Large"};
string json = JavaScriptConvert.SerializeObject(product);

Newtonsoft.Json.JavaScriptConvert.DeserializeObject:根据json字符串反序列化得到对象。

ProductdeserializedProduct = (Product)JavaScriptConvert.DeserializeObject(output,typeof(Product));

其中的output就是一个json字符串,而product是要反序列化的类对象
通过这两个常用的方法,就可以很方便的从json字符串得到对象和从对象得到json字符串。

13-05-2013 0 条评论

SB的南京某大学居然校园网又限速又流量,所以为了方便大家下载,特此提供离线安装包。

百度网盘:http://pan.baidu.com/share/link?shareid=388063&uk=941708466

校园网地址:http://download.njut.asia/vs2012_update2_package.7z

Visual Studio 2012 Update 2

Visual Studio更新版本2(Visual Studio 2012.2)是Visual Studio 最新的更新版本,提供一系列功能的增强与错误的修正。此外,更新版本2也包含了所有在之前 更新版本1之中所提供的功能。为了实现Visual
Studio产品的持续改进承诺,这次的更新包含了所有的版本,并且还针对旗舰版与企业版提供了有关软件开发生命周期管理的许多新功能。在更新版本2所包含的新功能主要针对以下四个关键领域:

  • 敏捷项目计划
  • 质量提升
  • 关键企业应用(Line Of Business)开发
  • 改善开发体验

敏捷项目计划

Visual Studio 2012引进了一系列的功能以助力团队实现敏捷开发。更新版本2更增加了许多新功能让您的团队可以定制化您所真正需要的敏捷开发过程工具。您现在可以在广告牌(Kanban)中新增定制化的栏位,以精确的反应您的组织架构。工作项目标签(Tag)功能可以帮助团队以新增标签的方式,更好的管理工作项目。

质量提升

Visual Studio 2012其中一项关键的价值就是在软件开发生命周期中,保障开发的质量。在更新版本2中,您可以使用网页工具进行测试用例管理,以持续不断的提高质量。您可以从远端发布或执行测试用例,让整个团队更容易的参与测试用例的检视。您还可以端到端的追踪您的代码,剖析您的单元测试以提高代码的质量,即使包括单元测试本身。

关键企业应用(Line Of Business)开发

在更新版本2中,我们持续投入在关键企业应用(Line Of Business)开发方面的改进。您可以使用LightSwitch快速的建立SharePoint应用与HTML5的客户端应用。您只需专注在应用的设计,让LightSwitch的范本帮助您更快的完成,这样您的企业关键应用程序就能够更快的执行。随着Visual Studio所提供的WPF、Silverlight与Blend SketchFlow的设计工具 ,现在您可以设计并编程出任何您所想要桌面应用程序。

改善开发体验

当您花费了大量的时间在软件开发,您一定期望您所使用的工具能提供令人愉悦的开发体验。更新版本2提供一系列对开发体验的改善与强化。代码地图除错集成(Code Map Debugger Integration)提供更视觉化的方式,帮助您在除错时更快的发现错误所在。您也可以使用增强的分析功能建立更好的Windows Store应用程序,及早发现错误,以免对您的用户造成影响。

KB2797912:
Visual Studio 2012 更新 2 的说明

其他更新

Visual Studio 2012 Update 2(Visual Studio 2012.2)还提供了其他的更新:

08-04-2013 1 条评论

时间限制: 2000ms 内存限制: 256MB

描述
有一棵树,树上有只毛毛虫。它在这棵树上生活了很久,对它的构造了如指掌。所以它在树上从来都是走最短路,不会绕路。它还还特别喜欢三角形,所以当它在树上爬来爬去的时候总会在想,如果把刚才爬过的那几根树枝/树干锯下来,能不能从中选三根出来拼成一个三角形呢?

输入
输入数据的第一行包含一个整数 T,表示数据组数。

接下来有 T 组数据,每组数据中:

第一行包含一个整数 N,表示树上节点的个数(从 1 到 N 标号)。

接下来的 N-1 行包含三个整数 a, b, len,表示有一根长度为 len 的树枝/树干在节点 a 和节点 b 之间。

接下来一行包含一个整数 M,表示询问数。

接下来M行每行两个整数 S, T,表示毛毛虫从 S 爬行到了 T,询问这段路程中的树枝/树干是否能拼成三角形。

输出
对于每组数据,先输出一行"Case #X:",其中X为数据组数编号,从 1 开始。

接下来对于每个询问输出一行,包含"Yes"或“No”,表示是否可以拼成三角形。

数据范围
1 ≤ T ≤ 5

小数据:1 ≤ N ≤ 100, 1 ≤ M ≤ 100, 1 ≤ len ≤ 10000

大数据:1 ≤ N ≤ 100000, 1 ≤ M ≤ 100000, 1 ≤ len ≤ 1000000000

样例输入
2
5
1 2 5
1 3 20
2 4 30
4 5 15
2
3 4
3 5
5
1 4 32
2 3 100
3 5 45
4 5 60
2
1 4
1 3
样例输出
Case #1:
No
Yes
Case #2:
No
Yes

#include<string>
#include<memory.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
struct load{
    int point;
    load*next;
};
int shortload(int start,int matrix[][105],int point,load **load_path);
const int INF=10000000;
int visit[105];
int matrix[105][105];
int dis[105];
int path[105][105];
load * load_path[105];
int main()
{
    int T,x;
	cin>>T;
	for(x=1;x<T+1;x++)
	{
		cout<<"Case #:"<<x<<endl;
		int point,line,length;
		int start_x,end_x;
		int i,j,k,l;
		cin>>point;
		for( i=0;i<point;i++)
			for( j=0;j<point;j++)
				matrix[i][j]=INF;
		for(i=0;i<point-1;i++)
		{
			int start,end;
			cin>>start>>end>>length;
			matrix[start-1][end-1]=matrix[end-1][start-1]=length;
		}
		int question;
		cin>>question;
		while(question--)
		{
			memset(path,0,105*105*sizeof(int ));
			cin>>start_x>>end_x;
			for( i=0;i<point;i++)
			{
				load_path[i]=(load*)malloc(sizeof(load));
				load_path[i]->point=start_x-1;
				load* p=(load*)malloc(sizeof(load));
				p->point=i;
				p->next=NULL;
				load_path[i]->next=p;
			}
			shortload(start_x-1,matrix,point,load_path);
			load* p=load_path[end_x-1];
			i=0;
			if(p)
			{
				while(p->next)
				{
					path[end_x-1][i]=matrix[p->point][p->next->point];
					i++;
					p=p->next;
				}
			}
			int flag=0;
			if(i<3)
			cout<<"No"<<endl;
			else
			{
				for(j=0;j<i-2;j++)
					for( k=j+1;k<i-1;k++)
						for(l=k+1;l<i;l++)
						{
							if((path[end_x-1][j]+path[end_x-1][k]>path[end_x-1][l])&&(path[end_x-1][j]-path[end_x-1][k]<path[end_x-1][l])
								&&(path[end_x-1][j]+path[end_x-1][l]>path[end_x-1][k])&&(path[end_x-1][j]-path[end_x-1][l]<path[end_x-1][k])
								&&(path[end_x-1][k]+path[end_x-1][l]>path[end_x-1][j])&&(path[end_x-1][k]-path[end_x-1][l]<path[end_x-1][j])
								)
							{
								cout<<"Yes"<<endl;
								flag=1;
								k=i-1;
								j=i-2;
								break;
							}
						}
						if(flag==0)
							cout<<"No"<<endl;
			}
		}
	}
}
int shortload(int start,int matrix[][105],int point,load ** load_path)
{
	for(int i=0;i<point;i++)
	{
		dis[i]=matrix[start][i];
		visit[i]=0;
	}
	visit[start]=1;
	dis[start]=0;
	int x=0;
	for(int i=0;i<point;i++)
	{
		int min=INF;
		for(int j=0;j<point;j++)
		{
			if(dis[j]<min&&visit[j]==0)
			{
				min=dis[j];
				x=j;
			}
		}
		visit[x]=1;
		for(int j=0;j<point;j++)
			if(visit[j]==0&&dis[x]+matrix[x][j]<dis[j])
			{
				load*p=load_path[x]->next;
				while(p)
				{
					load* q=(load*)malloc(sizeof(load));
					q->next=load_path[j]->next;
					load_path[j]->next=q;
					p=p->next;
				}
				p=load_path[x]->next;
				load*q=load_path[j]->next;
				while(p)
				{
					q->point=p->point;
					p=p->next;
					q=q->next;
				}
				dis[j]=dis[x]+matrix[x][j];
			}
	}
	return 0;
}

使用RE,放弃了,反正资格赛只要一道题就可以了,交给大家去解决吧。

高手用Java写的,大数据应该也没有问题:

https://github.com/castorgmc/LeetCode/blob/master/src/problems/Main.java

08-04-2013 0 条评论

下载地址:http://pan.baidu.com/share/link?shareid=400900&uk=639894609

08-04-2013 0 条评论

时间限制: 1000ms 内存限制: 256MB

描述
在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子,每个石子都只能放在网格的交叉点上。问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。

输入
输入文件包含多组测试数据。

第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。

每组数据为三个用空格隔开的整数 N,M,K。

输出
对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y表示最多能找到的符合条件的长方形数量。所有数据按读入顺序从1开始编号。

数据范围
1 ≤ T ≤ 100

0 ≤ K ≤ N * M

小数据:0 < N, M ≤ 30

大数据:0 < N, M ≤ 30000

样例输入
3
3 3 8
4 5 13
7 14 86
样例输出
Case #1: 5
Case #2: 18
Case #3: 1398

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <vector>
#include <map>
#include <algorithm>
#include <math.h>
#include <fstream>
using namespace std;
typedef long long LL;
int main()
{
        int T,x;
        while(scanf("%d",&T)==1)
        {
                for(x=1;x<=T;x++)
                {
                        LL N,M,K;
                        scanf("%lld%lld%lld",&N,&M,&K);
                        if(N>M)//让M大于N
                        {
                                N=M+N;
                                M=N-M;
                                N=N-M;
                        }
                        int n=sqrt(K)>N?N:sqrt(K);
                        int m=M;
                        while(n * m>K)
                                m--;
                        LL ans=0;
                        LL res=0;
                        while(n>=2&&m<=M)
                        {
                                LL k=K;
                                res += (n*m*(n-1)*(m-1))>>2 ;
                                k -= m*n;
                                if(m < M)
                                        res+=(m*k*(k-1))>>1;
                                else
                                        res+=(n*k*(k-1))>>1;
                                ans=res>ans?res:ans;
                                res=0;
                                n --;
                                m=K/n;
                        }
                        printf("Case #%d: %lldn",x,ans);
                }
        }
        return 0;
}

需要用到组合数学,还是破费了一番周折。思路就是先找到在网格中最大能形成的长方形矩阵的长x和宽y,算出剩余石子l,根据公式xy(x-1)(y-1)/4算出最大长方形矩阵可形成的长方形数量(正方形也属于长方形),再算出最长边加入剩余石子后可形成的长方形数量x * (l * (l-1)/2),他们的和即为结果。

08-04-2013 2 条评论

时间限制: 1000ms 内存限制: 256MB

描述
Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释。最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家。 

由于传话过程中可能出现一些偏差,游戏者越多,Bob最后听到的话就与Alice所想的越不同。Bob听到的话往往会变成一些很搞笑的东西,所以大家玩得乐此不疲。经过几轮游戏后,Alice注意到在两人传话中,有些词汇往往会错误地变成其他特定的词汇。Alice已经收集到了这样的一个词汇转化的列表,她想知道她的话传到Bob时会变成什么样子,请你写个程序来帮助她。

输入
输入包括多组数据。第一行是整数 T,表示有多少组测试数据。每组数据第一行包括两个整数 N 和 M,分别表示游戏者的数量和单词转化列表长度。随后有 M 行,每行包含两个用空格隔开的单词 a 和 b,表示单词 a 在传话中一定会变成 b。输入数据保证没有重复的 a。最后一行包含若干个用单个空格隔开的单词,表示Alice所想的句子,句子总长不超过100个字符。所有单词都只包含小写字母,并且长度不超过20,同一个单词的不同时态被认为是不同的单词。你可以假定不在列表中的单词永远不会变化。

输出
对于每组测试数据,单独输出一行“Case #c: s”。其中,c 为测试数据编号,s 为Bob所听到的句子。s 的格式与输入数据中Alice所想的句子格式相同。

数据范围
1 ≤ T ≤ 100

小数据:2 ≤ N ≤ 10, 0 ≤ M ≤ 10 

大数据:2 ≤ N ≤ 100, 0 ≤ M ≤ 100 

样例输入
2
4 3
ship sheep
sinking thinking
thinking sinking
the ship is sinking
10 5
tidy tiny
tiger liar
tired tire
tire bear
liar bear
a tidy tiger is tired
样例输出
Case #1: the sheep is thinking
Case #2: a tiny bear is bear

#include<iostream>
#include<stdio.h>
#include<map>
#include<string>
using namespace std;

int main()
{
    int T;
    cin>>T;
    if(T<1||T>100)
        return 0;
    string result[100];
    int N,M;
    map<string,string> mapstring;
    for(int k=0;k<T;++k){
        cin>>N>>M;
        if(N<2||N>10||M<0||M>10)
            return 0;
        string s1,s2,str[1000];
        mapstring.clear();
        for(int i=0;i<M;++i){
            cin>>s1>>s2;
            if(s1.size()>20||s2.size()>20)
                return 0;
            mapstring.insert(pair <string,string>( s1, s2 ));
        }
        int itr=0;
         string ss;
        getchar();
        getline(cin,ss);
        string::iterator p=ss.begin();
        while(p!=ss.end()){
            if(*p==' ')
                ++itr;
            else
                str[itr].push_back(*p);
            ++p;
        }
        itr=0;
        map<string, string>::iterator iter;
        while(str[itr]!=""){
            for(int i=0;i<N-1;++i){
                iter=mapstring.find(str[itr]);
                if(iter!=mapstring.end())
                    str[itr]=iter->second;
                else
                    break;
            }
            itr++;
        }
        if(str[itr]=="")
            if(itr>100)
                return 0;
        else
            if(itr>99)
                return 0;
        itr=0;
        while(str[itr]!=""){
            string tmp=str[itr]+" ";
            result[k]+=tmp;
            itr++;
        }
        result[k]=result[k].substr(0,result[k].length()-1);
    }
    for(int i=0;i<T;++i)
        cout<<"Case #"<<i+1<<": "<<result[i]<<endl;
    return 0;
}
01-04-2013 0 条评论

今天又同学邮件问怎么把数据库中DATETIME类型变成“YYYY-MM-DD”,所以特地把Convert函数关于时间的整理了一下,方便大家查询

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM 
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06 
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06 
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06 
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06 
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06 
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46 
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM 
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06 
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16 
Select CONVERT(varchar(100), GETDATE(), 12): 060516 
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937 
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967 
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47 
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157 
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM 
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47 
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250 
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM 
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006 
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16 
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006 
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006 
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006 
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006 
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006 
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49 
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM 
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006 
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16 
Select CONVERT(varchar(100), GETDATE(), 112): 20060516 
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513 
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547 
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49 
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700 
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827 
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM 
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

08-03-2013 0 条评论

数据库:MySQL

平台:.net framework 2.0 (C#)

组建:Winista.Text.HtmlParser

演示页面:2013年3月7日南京市各区县农贸市场主副食品价格对比表  http://www.njprice.com/col71/col464/articleinfo.php?infoid=44181

2013年2月28日南京市各区县农贸市场主副食品价格对比表   http://www.njprice.com/col71/col464/articleinfo.php?infoid=44079

以及所有其他日期发布的《南京市各区县农贸市场主副食品价格对比表》

using System;
using System.Collections.Generic;
using System.Text;
using nanjing_price.WebUtility;
using Winista.Text.HtmlParser;
using Winista.Text.HtmlParser.Lex;
using Winista.Text.HtmlParser.Util;
using Winista.Text.HtmlParser.Tags;
using Winista.Text.HtmlParser.Filters;
using org.nutlab;

namespace nanjing_price.Fuction
{
    class NanjingMain
    {
        string content;
        string urlStr;

        public NanjingMain(string url)
        {
            this.urlStr = url;
            getContent();
            inputDB();
        }

        void getContent()
        {
            webUtility web = new webUtility();
            content = Tools.filterScript(web.getContent(urlStr));
        }

        void inputDB()
        {
            DateTime publishTime = new DateTime();
            good_price price = new good_price();
            Parser parser = Parser.CreateParser(Tools.filterTableAttribute(content.Replace(System.Environment.NewLine, "")), "gb2312");
            NodeFilter table = new TagNameFilter("table");
            INode Table = parser.Parse(table)[2].Children[3];
            parser = Parser.CreateParser(Table.ToHtml(), "gb2312");
            Table = parser.Parse(table)[3];
            parser = Parser.CreateParser(Table.ToHtml(), "gb2312");
            Table = parser.Parse(table)[2];
            Console.WriteLine(Table.ToHtml());
            INode tempTag = Table;
            TableTag tableTag = (TableTag)tempTag;//上面判断如果得到的第一个为table 
            Winista.Text.HtmlParser.Tags.TableRow[] tr = tableTag.Rows;//得到该table所有的tr
            TableColumn[] tc = tr[2].Columns;
            publishTime = Convert.ToDateTime(tc[0].ToPlainTextString().Trim().Substring(3));
            Console.WriteLine(publishTime);
            for (int i = 6; i < tr.Length; i++)
            {
                tc = tr[i].Columns;
                for (int j = 3; j < tc.Length; j++)
                {
                    price.name = tc[0].ToPlainTextString().Trim();
                    price.standard = tc[1].ToPlainTextString().Trim();
                    price.unit = tc[2].ToPlainTextString().Trim();
                    price.district_name = tr[4].Columns[j].ToPlainTextString().Trim();
                    price.market_name = tr[5].Columns[j].ToPlainTextString().Trim();
                    price.amount = tc[j].ToPlainTextString().Trim();
                    price.publish_time = publishTime;
                    price.get_time = System.DateTime.Now;
                    price.get_url = urlStr;
                    price.Add();
                }
            }
        }

    }
}

源代码下载:点击下载

SVN: Google Code

04-03-2013 0 条评论

      网页文字中间加横线打杠比较简单, 有个非标的html标签可以用: <strike> 

     <strike>已经过期</strike> 显示就是: 已经过期

  • About Totoro

  • 近期文章

  • 2017年五月
    « 10月    
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
  • 分类目录

  • 近期评论

  • 标签

  • 功能

  • 友情链接