最近的二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
【转】调整phpmyadmin中的Cookie会话过期时间1440
phpmyadmin在使用过程中经常出现“登陆超时(1440秒未活动),请重新登录”,很烦
解决方法如下:
修改php.ini,找到
session.gc_maxlifetime = 1440
将数值改大就行了,然后使之生效
试验了一下,结果不好使。
最终解决方案:
找到 phpMyAdmin / libraries / config.default.php 文件,打开,修改
$cfg['LoginCookieValidity'] = 1440;
将1440修改成更大的值即可。
注意:$cfg['LoginCookieValidity']的值不能大于php.ini里的session.gc_maxlifetime的值,否则phpmyadmin 里会出现“您的 PHP 配置参数 session.gc_maxlifetime (外链,英文) 短于您在 phpMyAdmin 中设置的 Cookies 有效期,因此您的登录会话有效期将会比您在 phpMyAdmin 中设置的时间要更短。”错误。
ps:我在3.4.2和3.3.3下都修改成功,3.4.2的设置,功能里面能可以直接设置,但是我的php.ini里面最大设了1440,所以设得再大也只能本次会话有效
期待暑假爆发
放暑假就是我进入ACM队一周年的纪念日吧。
不知道今年能不能继续参加暑期集训,长期打酱油,怕被教练开掉啊。
不论如何,我不会放弃的。
最近快期末了,想多花点时间在学习上。
本以为这个赛季的现场赛都结束了,昨天接到njupt校赛邀请,我们学校去十几个人,我也报名了。
多参加现场赛,锻炼肯定比在宿舍里大得多。
平时得我太浮躁,很难静下心来思考困难的问题。
现场比赛倒是能够给我设定这样一个环境的,没有手机、因特网的干扰,我发现自己还是能安静想问题的。
只是,我太弱了,什么算法都不会,写模拟题的能力也不行,哎。。。
下午南邮网络赛,完全被虐啦。
一开始还不错,不到一个小时就实现了2题,rank里面还算靠前。
然后,突然就卡住了,好几道题都卡到爆,555。
直到最后一个小时才连出两题,最终以4题饮恨。
其实,这个比赛难度不大,山鬼、宇娘经5个小时的鏖战,都出了8题,偶尔卡一下,时间也不长,很均匀地就逐渐跑到rank的前两位。后面的wavwind,zlly,bearjie,都是6、7题,时间足的话也能再出题,可是4题的我和他们的差距太大了。。。不是很容易就能赶上的。
最后时刻,我围观宇娘,拍代码的速度,正确率,甚至贴测试数据的动作都比我快了许多。
差距是全方位的,我要虚心,利用暑假,好好学习。
不要再那么得浮躁了!!!