2013年7月21日
摘要: 链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3716题意:给一个四边形,在每个顶点处画一个圆,要求圆不能重叠,求四个圆最大的半径和。思路:一般一点的想法是四个圆里面有三个圆是两两相切,然后枚举最后一个圆。这个题我现在也还想不明白。求各位指教。下面是传说中世界冠军YY的的思路。在矩形中取一三边为a,b,c的三角形,设三相切圆半径为r1,r2,r3.设r1+r2=a,r1+r3=b,r2+r3=c.假设r4与三圆中的R2相切,则{r4+r2=b ,r1+r2=a,r1+r3=b,r2+r3=c }解方程组得r4=( 阅读全文
posted @ 2013-07-21 13:52 ∑求和 阅读(427) 评论(4) 推荐(0) 编辑
2013年7月19日
摘要: 链接:http://codeforces.com/problemset/problem/331/C1题意:省略它。。。思路:暴力,没什么好说的。话说C2,C3是不是要用数位DP来做呢?以后学了再做做吧。#include#include#includeusing namespace std;int main(){ int n,m,k,maxn,ans=0; int s[7]; cin>>n; while(n) { m=n;k=0; while(m) { s[k++]=m%10; m... 阅读全文
posted @ 2013-07-19 19:31 ∑求和 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 链接:http://codeforces.com/problemset/problem/331/A1题意:不翻译了。思路:A1题数据范围小,暴力是可行的,我果断暴力了。不过,话说,除了暴力我还会什么。。。闲话少说。A2的话,采用线段树。不过我不会,哈哈哈。找了位仁兄的代码看了一下,思路比较巧妙,值得学习,虽然没有用到数据结构,但是可以解决。不过我忘记是哪位仁兄的了,你要是看到了的话,提醒我一下。就贴那位仁兄的代码吧。#include #include #include using namespace std;#define INF 3000000000llmap last;int a[3000 阅读全文
posted @ 2013-07-19 19:25 ∑求和 阅读(1580) 评论(0) 推荐(0) 编辑
摘要: 链接:http://codeforces.com/problemset/problem/327/A题意:给一串数,只由0和1组成,在某个区间内,把1变成0,0变成1,再把所有数求和,求能达到的最大的和。思路:暴力嘛,就一个区间一个区间的试咯。这样的话是O(n^3)的复杂度。如果预处理求出前 i 个数的和,可以降到O(n^2)。采用动态规划可以降到O(n)。#include#includeusing namespace std;int a[102],s[102];int n;int main(){ int sum,minm,i,j; s[0]=0; while(~scanf("... 阅读全文
posted @ 2013-07-19 19:09 ∑求和 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 链接:http://codeforces.com/problemset/problem/327/B题意:输出n个数,满足:升序排列,后面的任意一个数不能被前面的数整除。思路:输出n,n+1,n+2...n+n-1即可。一开始想的很复杂,原来这么做就可以了。数学真是个奇妙的东西。由于要求后面的数不能被前面的数整除,n的最小倍数是2n(除了一倍),在n到2n-1的闭区间内就有n个数,且是满足条件的。#include#includeusing namespace std;int main(){ int n; while(~scanf("%d",&n)) { for(i.. 阅读全文
posted @ 2013-07-19 18:59 ∑求和 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 链接:http://codeforces.com/problemset/problem/327/C题意:给一串数,这串数重复k次,求去掉一些数后得到的新数能被5整除,问有多少种方法得到满足条件的数。思路:要求能被5整除,则数的末位必然是0或5,求出原始串中0和5的位置,从0开始计数,位置为i1,i2,i3,,,in,则有a=2^i1+2^i2+...+2^in种方法。则在所有中的方法总数为:s=a*(q^n-1)/(q-1),q=2^len,len为原始串的长度。这个公式推一下就出来了。由于数据范围很大,所以要模1e9+7。在求幂的时候采用的是快速幂来做。除以(q-1)的话,求出它的逆元。由欧 阅读全文
posted @ 2013-07-19 18:48 ∑求和 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 链接:http://www.lightoj.com/volume_showproblem.php?problem=1077题意:给出平面上两个点,求这两点连成的线段上的整点个数。数据范围是32位有符号整数。思路:一开始觉得是几何题,但是用几何的方法来做很明显会T。简单的方法是求出gcd(abs(x2-x1),abs(y2-y1))+1即可。想象一下,一条斜着的线段,要求线段上的整点个数,求出横坐标差与纵坐标差的最大公约数就差不多了。#include#include#include#include#includeusing namespace std;typedef long long LL;. 阅读全文
posted @ 2013-07-19 13:07 ∑求和 阅读(294) 评论(3) 推荐(0) 编辑
2013年7月18日
摘要: 链接:http://lightoj.com/volume_showproblem.php?problem=1007题意:给一段闭区间,求区间中每一个数的欧拉函数值的平方和。思路:思路很简单,先打表,求出1到5e6的欧拉函数值,然后再求平方和。思路虽然简单,但是这道题还是A得好艰难。T,WA,超内存都出现了,泪。一个要注意的是由于数据过大,要用unsigned long long,不然就WA了。还有就是求平方和的时候,如果每次都用一个循环来求的话,会T掉,所以预先求出前 i 项的平方和。在求平方和的过程中,如果再开一个数组来保存前 i 项和的话,会超内存。有点奇怪的是,a,b都是小于等于5e6, 阅读全文
posted @ 2013-07-18 23:03 ∑求和 阅读(569) 评论(0) 推荐(0) 编辑
2013年7月14日
摘要: 链接:http://poj.org/problem?id=3347题意:一系列正方形立着排列,正方形互不重叠,能贴着放就贴着,求俯视的时候能看到哪些正方形。思路:把正方形的重叠问题转化为线段相交问题。正方形投影到x轴上就是横着的那条对角线,如果把正方形边长扩大根号2倍的话,对角线长就是整数,便于处理。然后再来对线段长进行裁剪,如果某部分被遮住了的话,就去掉这部分。还有个重要的地方是求正方形的左边顶点的横坐标,对于某个正方形,假定他和前面的正方形都是贴着的,求出相应的横坐标,取最大,即可。#include#include#includeusing namespace std;struct squ 阅读全文
posted @ 2013-07-14 19:41 ∑求和 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 链接:http://poj.org/problem?id=1039题意:给一段曲折的管道,管道宽度为1,从管口射入光线,管子不透光、不反射,求光线最远能射到的地方的横坐标,如果光线能完全穿过管子,也输出。思路:入射得最远的光线必然过管道的上下两个折点,由于数据量不大,所以可枚举两个折点得到一条直线。然后求直线与管道的交点。可以从左到右,通过比较在折点的横坐标处直线的纵坐标和对应折点纵坐标的大小来判断直线是与上下哪个管壁相交,然后求交点。最后取最大的横坐标值。#include#include#include#includeusing namespace std;int n;const int m 阅读全文
posted @ 2013-07-14 18:56 ∑求和 阅读(395) 评论(0) 推荐(0) 编辑