摘要:
用树状数组求逆序对数。。。#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <iostream>#define MAX 3000005#define MaxN 10005using namespace std;int ans[MAX];__int64 c[MaxN];inline void updata( int s ){ while( s < MaxN ) { c[s]++; s += ( s & (-s) ); 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3833 做这题还真是纠结啊,有很多小地方要注意。前面没有看清题义,题中给的数字是一个1-N的排列。 这题是这么做的,首先将每个数字的顺序通过数组记录起来,然后再根据 2*p[i2] = p[i1] + p[i3]进行暴力搜索。 搜索过程中要特别注意范围的选定,由于 p[i2] 是中间的一个数,所以其范围为 2 <= p[i2] <= N-1 ,而 p[i1] < p[i2] && p[i2] > p[i3];同时应该记得有范围 1 <= p[i1] <= N 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2601 题意:是将一个数 N 分解成 i * j + i + j 有多少种分解方式。 思路:以 i 作为一个维度,j 作为第二维度进行循环,则 N = i * j + i + j = i * (j + 1) + i ; 当 j = j+ 1 时 N' = i * (j + 1) + i + j + 1 = N + i + 1; 所以只要进行一为循环就可以了,判定 ( N - i ) % (i + 1) == 0 ? 就可以了。 代码:#include <cstdio>#include &l 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1006 在参考了0o恋蓝o0在Discuss中所说后,总算把这一题给弄懂了。题目要求:给定一个角度,问一天中时钟上的三根指针的夹角都大于等于该夹角的总时间占一天总时间的百分比。 思路:1、求出两两指针的相对较速度。 2、然后根据这个相对角速度求出两两之间的周期(即第一次重合到第二次重合所花的时间)。 3、计算出符合角度要求的两指针第一次满足和第一次不满足的时间。 4、在三个时间段上加上各自的周期,再取他们的交集即可。 代码如下:#include <cstdio>#include <cstri 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2710给定N个数,求出其中含有最大素因子的数。两个代码:自己的恶心代码#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>using namespace std;int p[20010], max[20005];inline int cal( int x ){ for( int i = x / 2; i >= 1; --i ) { if( !p[x] ) return x 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3952 这是一道计算几何的题目,刚好昨晚看了一下基本的计算几何,而这题就是叉积的应用。 设有两个共起点向量 A,B, 其中 A = { x1, y1 }, B = { x2, y2 }; A X B = x1 * y2 + x2 * y1; 如果 A X B > 0, 那么说明A向量在B向量的顺时针方向,反之则说明A在B的逆时针方向。等于零,说明两个向量重合。 那么对于某一点,就可以运用这一点来判定该点是在线段的左还是右了,即选择一个端点,再连接这个端点和所求的一点,构造出另一个向量......... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3337 这题一看没有一点头绪,题目中只说了输入数据是由大小写字母及数字组成的不超过16位的字符串,其能够表达的一个数字。我们要做的就是输出这个数字。说起来,这个真不好办,看了下大神的思路,原来是通过OJ不同的评测结果来测试后台数据,挺有意思的。 我的方法比较土,一个一个试,不知到他们所说的输入机器人是怎么弄的。一共提交了90+次,终于对了。 这时测试时的代码:#include <cstdio>#include <cstring>#include <cstdlib>#defi 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=4033 题中给定某一点到N个点的距离,问这些点能否组成正多边形? 思路:选定两条边,通过二分法枚举某一条边的边长,算出该边长下对应的中心角,然后再依据此边计算出其余三角形对应的中心角,最后看总的角度是否为360度。 代码如下: #include <cstdio>#include <cstring>#include <cmath>using namespace std;double e[200];const double PI = 4 * atan( double( 1 ) 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1212 不料JAVA又出问题了,Scanner 类竟然识别不出来,我不知道哪里出了问题,这题是求一个大数对一个相对较小的数的取余运算。刚开始的想法很傻很天真啊,直接计算出被除数的位数,再取相应的位数取余。这可是不知道错哪去了,这是对 10^K 次方的数的取余操作,放在这里显然是不合适的,如果硬要这么做的话,那么前提就是这个数必须是以MOD为进制的数。该题是这样处理的,首先判断是否满了6位,如果大于6位数字,那么就可以利用较高一位的单位量取余值等于低一位的取余值乘以十再取余。 代码如下:#include... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1172这题要换个思维,不要想着如何通过已有的条件来得到正确的值,而是枚举0000-9999这10000个数,看满足条件的数字有多少个,只有刚好有一个的数满足的情况下才输出。代码如下:#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <iostream>#define MIN( x, y ) (x) < (y) ? (x) : (y)usin 阅读全文