2014年1月14日
摘要: 暴力果断超时 下面给出一个大神的证明:http://www.cnblogs.com/devymex/archive/2010/08/07/1799713.html这是一道数论题,用数学的语言描述就是:x, y, z∈N,给定一个数n,找出所有的x, y, z ≤ n,使得x2+ y2= z2成立。如果要穷举所有的x, y, z的话,按照题目所给的数据量,肯定是无法在限定时间内完成的。考虑利用毕达哥拉斯数的性质生成所有的x, y, z来解决,数学推导简要介绍如下:先假定x, y, z两两互质,由于x, y互质,故x, y中至少有1个是奇数。下面用反证法证明x和y中有且只有1个奇数。假定x, y都 阅读全文
posted @ 2014-01-14 17:23 风流monkey 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 就是问在一个n*m的棋盘里最多能放多少个knight,一开始想是回溯么,最后一想不是;分为三种情况 n==1 || m==1 这种都明白n==2 || m==2 这种情况下要除4,商乘4加上对余数的处理(画图后一目了然)最后一种是n*m/2,不能整除时加一#include #include #include #include using std::min;using std::max;int n,m;int solve(){ int a=min(n,m); int b=n+m-a; if(a==1) return b; else if(a==2) {... 阅读全文
posted @ 2014-01-14 15:33 风流monkey 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 就是求任意两点之间最短距离的 最大值 floyd完美解决 自己一个多月没练,手生了,题目也难读懂了!努力吧骚年!#include #include #include #include using std::min;using std::max;int n;int dx[103][2];double d[102][102];double solve(int x, int y){ return sqrt((dx[x][0]-dx[y][0])*(dx[x][0]-dx[y][0])+(dx[x][1]-dx[y][1])*(dx[x][1]-dx[y][1]));}int main(){ ... 阅读全文
posted @ 2014-01-14 15:19 风流monkey 阅读(118) 评论(0) 推荐(0) 编辑