我的成长日记
岁月就像一条河,
左岸是无法忘却的隐隐忧伤,
右岸是值得把握的青春年华,
中间飞快流淌的,是我们成长中最美好的记忆。
2006-10-31,我在百度空间安了家。
到现在,我已经拥有105个好友,有110人关注了我。一共有40506人访问了我的主页!
2006-10-31,我学会了上传照片,看这是我的第一张照片,到现在我已经传了1179张照片。
2006-10-31,我发表了第一篇文章:《百度空间与新浪博客的区别》。
2008-02-21,我收到了第一条留言,到现在已经有48条留言。
不知不觉,du掌柜告诉我她5岁了,我才意识到自己在百度空间已经走过了1719个日日夜夜。
在这里发生的点点滴滴,都是我永远珍藏的记忆~。
lmm333写于2011-7-16
我也不想这样
poj终于300了。
从200到300,花了多达8个月。
这八个月里:
第一个月(12月):迎接新年
shangke7788以新大一学学生身份听了ACM宣讲会。
我虽然没有在宣讲会上台讲话,但是以老队员的身份坐在台下,做了少许幕后工作。
第二个月(1月):期末
shangke7788切掉了poj的第一题。
为准备期末考试,我中断poj的刷题进度。
第三个月(2月):寒假
shangke7788以每天10题的进度高速前进。
我忽视了鱼头刷到300的要求,沉迷于php,申请免费空间,搭建自己的独立博客,同时尝试用php做了njust poj real time rank,动态显示同学们进步退步等情况,不要再麻烦地手动统计。寒假结束,real time rank做出来了,在那上面,我自己却以240题排在末位。
第四个月(3月):开学
shangke7788降到平均每天5题。
免费空间被黑掉之后,poj rank挂到njustoj beta 的服务器上,因为没有v4地址,只能ipv6访问。服务器很老(05年的PC),rank和oj一样效率地下,打开页面极为缓慢。
第五个月(4月):上半学期
shangke778的快速进步引起重视,提前进队了。
我的java课程设计作业做了njustoj contest rating,算法完全抄袭topcoder,通过oj开放的web服务获得比赛结果,算是对oj开放平台plugin功能的一个小测试。做好后没有及时重构,代码质量糟糕,现在已经很难维护。
ps:oj的核心成员teenager利用java课程设计做了njustoj分布式节点,实现了windows和linux下的判题节点与服务器的交互。
第六个月(5月):下半学期,各种比赛
shangke7788不到2个小时就切掉了校赛的4道水题,后来卡在一道数据有问题的题目上。最终排名第五。
我依靠贴模版过了第5题,罚时多5分钟,最终校赛第四,挽救了“长期不给力”表现下差的被踢出队境地,不过,复旦邀请赛是没机会的。趁机参加了njfu,nju,njupt的校赛,各种被虐。
ps:teenager发布了oj的ajax版本,美观与效率都有了很大提高
第七个月(6月):期末
shangke7788在240的数量停止刷题,开始复习迎考。
我利用.net课程设计的机会做了njust summer training automation system,重写了poj real time rank,整合了contest rating,后来集训开始又临时加上了签到、讲题等功能。由于赶工期、服务器暂时不能连外网、plugin管理功能没做好等因素,反馈不咋样,恶评如潮。
第八个月(7月):暑期集训开始
shangke已经330题,完全超越了我,而且我也追不上他的前进的脚步。
我在训练赛中表现不佳,除了倒数第一,其他末位的名次几乎拿全了。
总结:
本来有很好的机会,可是大好的时光浪费了。被学弟轻松超越,现在单挑,我已然不是对手。
马上就要大三了,我什么都不会,regional的机会也显得越来越渺茫。
工程方面,和teenager差距太大,完全不能参与核心的开发,只能乱搞点插件。
哎,我也不想这样。
可是一切毁在自己手上,又能怨谁呢?
这个暑假,心情一直不好,憋了好久,说出来希望能好受些。
望各位神牛给予迷惘中的我一些帮助,给点切实的建议把。
最近的二b错误汇总
这两天做了一些简单背包问题,竟然5道里面卡了4道。
今晚终于在友人的帮助下过了一道,是个2b错误,贴出来晒晒,明天继续搞后面几道,看看错误到底在哪里,到时候再来更新。
(1)
#include<cstdio>#include<cstdlib>#include<cstring>usingnamespace std;#define max(x,y) ((x) > (y) ? (x) : (y))#define bagSize 200010#define bagNum 15int dp[bagSize], N, VOLUMN, value[bagNum], weight[bagNum], amount[bagNum];int DAY, interset;int main() { int i, j; int T; scanf("%d", &T); while (T--) { scanf("%d%d%d", &VOLUMN, &DAY, &N); VOLUMN /= 1000; interset = 0; memset(dp, 0, sizeof (dp)); for (i = 1; i <= N; i++) { scanf("%d%d", weight + i, value + i); weight[i] /= 1000; } while (DAY--) { for (int i = 1; i <= N; ++i) { //CompletePack(weight[i], value[i]);for (int j = weight[i]; j <= (VOLUMN + interset / 1000); ++j) { dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); } } interset += dp[VOLUMN + interset / 1000]; } printf("%d\n", VOLUMN * 1000 + interset); } return0;}
本高亮代码使用codeHl生成,查看详情
这个代码高亮怎么不灵了?哎
把VOLUMN换成VOLUMN * 1000就可以ac了
原因,题目说The value of a bond is always a multiple of $1 000,但是一开始给的总钱不一定是1000倍数啊,除1000乘1000,wa了一下午,伤不起啊。
(2)上午做了一场练习赛,大部分结对都是4、5题啊,我们4题,比赛12点结束,我们实现了线段树,然后交题,
这就是提交情况,第一次ce了,然后加头文件,然后再交,接着交错代码了,发现之后重交 ,ac了,可惜比赛结束了。。。
(3)一道2分水题,三十几次提交终于ac,犯了各种错误
其中,最大的错误是:
while (scanf("%d%d", &n, &k),n&&k),n==k==0时退出
改成while (scanf("%d%d", &n, &k),n||k)
输入用%f错
输出用%lf错
精度不够错
。。。 。。。
我真的是沙茶
sql查询笔记
平时只把数据库作为存储数据的工具,都是读出所有数据,然后再处理。这种把业务逻辑封装在程序中的方法可移植性比较好。
今天,为了快速实现oj暑期训练的一些功能,直接用gridview显示数据,要写若干查询语句,我竟然百度了好久才完成。整理一下资料放在这里,减少以后重构的时间。
查询语句顺序:
select...from...where...group by...having...order by...
执行顺序:
from...where...group by ...having...select...order by...
//查询今天签到的同学
select true_name from sign_in Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') group by true_name
//查询今天没签到的同学(使用子查询)
select true_name from user where status=0 and true_name not in(select true_name from sign_in Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') group by true_name)
//按今天签到次数排名
select true_name,datetime,ip_address,count(*) as num from sign_in Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') group by true_name order by num desc
//今天讲题
select * from teach Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
//今天讲题 按老师分组
select * from teach Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') group by name_teacher
//今天讲题 按老师分组 大于等于两题
select * from teach Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') group by name_teacher having count(*)>=1
//今天每个老师讲题次数并排序15:29 2011-06-30
select name_teacher,count(*) as num from teach Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') group by name_teacher order by num desc
//今天每个学生讲题次数并排序
select name_student,count(*) as num from teach Where DATE_FORMAT((datetime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') group by name_student order by num desc
【转】JAVA大数
在用C或者C++处理大数时感觉非常麻烦,但是在JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,
两个类的对象能表示最大范围理论上能够表示无线大的数,只要计算机内存足够大。 这两个类都在java.math.*包中,因此每次必须在开头处引用该包。
Ⅰ基本函数:
1.valueOf(parament); 将参数转换为制定的类型
比如 int a=3;
BigInteger b=BigInteger.valueOf(a);
则b=3;
String s=”12345”;
BigInteger c=BigInteger.valueOf(s);
则c=12345;
2.add(); 大整数相加
BigInteger a=new BigInteger(“23”);
BigInteger b=new BigInteger(“34”);
a.add(b);
3.subtract(); 相减
4.multiply(); 相乘
5.divide(); 相除取整
6.remainder(); 取余
7.pow(); a.pow(b)=a^b
8.gcd(); 最大公约数
9.abs(); 绝对值
10.negate(); 取反数
11.mod(); a.mod(b)=a%b=a.remainder(b);
12.max(); min();
13.public int comareTo();
14.boolean equals(); 是否相等
15.BigInteger构造函数:
一般用到以下两种:
BigInteger(String val);
将指定字符串转换为十进制表示形式;
BigInteger(String val,int radix);
将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger
Ⅱ.基本常量:
A=BigInteger.ONE 1
B=BigInteger.TEN 10
C=BigInteger.ZERO 0
Ⅲ.基本操作
1. 读入:
用Scanner类定义对象进行控制台读入,Scanner类在java.util.*包中
Scanner cin=new Scanner(System.in);// 读入
while(cin.hasNext()) //等同于!=EOF
{
int n;
BigInteger m;
n=cin.nextInt(); //读入一个int;
m=cin.nextBigInteger();//读入一个BigInteger;
System.out.print(m.toString());
}
Ⅳ.运用
四则预算:
import java.util.Scanner;import java.math.*;import java.text.*;public class Main {public static void main(String args[]){ Scanner cin = new Scanner ( System.in ); BigInteger a,b; int c; char op; String s; while(cin.hasNext() ) { a = cin.nextBigInteger(); s = cin.next(); op = s.charAt(0); if( op == '+') { b = cin.nextBigInteger(); System.out.println(a.add(b)); } else if( op == '-') { b = cin.nextBigInteger(); System.out.println(a.subtract(b)); } else if( op == '*') { b = cin.nextBigInteger(); System.out.println(a.multiply(b)); } else { BigDecimal a1,b1,eps; String s1,s2,temp; s1 = a.toString(); a1 = new BigDecimal(s1); b = cin.nextBigInteger(); s2 = b.toString(); b1 = new BigDecimal(s2); c = cin.nextInt(); eps = a1.divide(b1,c,4); System.out.print( a.divide(b) + " " + a.mod(b) + " "); if( c != 0) { temp = "0."; for(int i = 0; i < c; i ++) temp += "0"; DecimalFormat gd = new DecimalFormat(temp); System.out.println(gd.format(eps)); } else System.out.println(eps); } } }}例子:求一个n元素集合中k个元素的组合数量:C(n,k) = n!/(k! * (n-k)!)import java.math.BigInteger; import java.util.*;import java.io.*; public class FactorialBigIntegerTest { public static void main(String[] args) throws Exception { Scanner cin=new Scanner(System.in); int T = cin.nextInt(); for(int i = 0;i < T;i++){ int n=cin.nextInt(),k=cin.nextInt(); BigInteger nf= new BigInteger(""+factorial(n)); BigInteger kf= new BigInteger(""+factorial(k)); BigInteger nk = new BigInteger(""+factorial(n-k)); BigInteger n1 = new BigInteger(""+nf.divide(kf)); System.out.println(n1.divide(nk)); } } private static final BigInteger factorial(int n){ BigInteger bigInteger=new BigInteger(""+n); if(n==0) return BigInteger.ONE; else return factorial(n-1).multiply(bigInteger); } } 输入 2000 50运行结果:19961695734279236211032903597262781251004330223561192760088208846391036329722665786642280715824928160
例子:
poj2305
大数的进制转换
String st = Integer.toString(num, base); // 把num当做10进制的数转成base进制的st(base <= 35).
int num = Integer.parseInt(st, base); // 把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,
// 第二个为说明是什么进制).
BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.
1.如果要将一个大数以2进制形式读入 可以使用cin.nextBigInteger(2);
当然也可以使用其他进制方式读入;
2.如果要将一个大数转换成其他进制形式的字符串 使用cin.toString(2);//将它转换成2进制表示的字符串
关键代码:
Scanner cin=new Scanner(System.in);BigInteger p,m,ans;
p=cin.nextBigInteger(b);//从命令行以b进制读大数m=cin.nextBigInteger(b);ans=p.mod(m);//p%m