2011年9月20日
摘要: UVA_10341 由于函数在指定定义域内是单调的,所以直接二分答案即可。#include<stdio.h>#include<math.h>#include<stdlib.h>double p,q,r,s,t,u;double f(double x){ double temp; temp=p*exp(-x)+q*sin(x)+r*cos(x)+s*tan(x)+t*x*x+u; return temp;}int main(){ int i; double max,min,mid; while(scanf("%lf%lf%lf%lf%l... 阅读全文
posted @ 2011-09-20 21:28 Staginner 阅读(387) 评论(0) 推荐(0)
摘要: UVA_10763这个题目可以把交换生的u->v看做一条有向边,然后用邻接表把所有的边及其反向边存下来,并且保证邻接表中没有重复的边。这时用一个num[]数组来存储该边的数量,并且每出现一条与之相同的正向边num[]的值自加1,每出现一条与之相反的反向边,num[]的值自减1。最后统计邻接表中num的值是否全为0,如果全为0就输出YES,否则就输出NO。另外,之所以选用邻接表,是怕题目中存在国家表示的数字很大(比如500000)的情况,后来发现最大的数字不超过1000,于是便又改用邻接矩阵存边了,这样在插入边时要比邻接表要快得多,代码复杂度也降低了很多。#include<stdio 阅读全文
posted @ 2011-09-20 19:06 Staginner 阅读(1509) 评论(6) 推荐(1)
摘要: UVA_10905 这个题实际上也是个排序的题目,只不过排序的标准比较特殊,但有一点是不变的,如果任意局部是有序的,那么全局一定是有序的。所以我们只要把qsort函数中的cmp函数的“排序规则”给改写一下就可以了,即对任意两个数a、b来说,如果ab大于ba,那么在最大值中a一定在b的前面,而对于ab与ba的比较,由于长度相同,只要调用一下strcmp就可以了。由于输入数据里面有比较大的数,所以数组还要开大一点。#include<stdio.h>#include<string.h>#include<stdlib.h>char b[60][500];char t 阅读全文
posted @ 2011-09-20 16:39 Staginner 阅读(366) 评论(0) 推荐(0)
摘要: HDU_3683这个题目由于情况不多,所以可以直接枚举,只不过枚举的时候需要注意一些细节。枚举顺序如下:①判断我们1步是否能赢。②判断我们2步是否会输。实际上如果第2步会输,那么就相当于在当前棋盘状态下,对方至少有2个地方可以在落子后连5。 ③判断我们3步是否会赢。在这里需要讨论一下,如果轮到③就说明我们在②的时候得到了两种情况,对方有1个地方可以在落子后连5,或者没有这样的地方。如果有1个地方可以落子连5,那么这一步我们必须走这个位置,如果没有这样的位置,我们这步就可以随意落子。枚举我们的落子位置之后再判断一下对方2步是否会输即可(相当于又进行了一次②,只不过这时的对象由我们变成了对方)。# 阅读全文
posted @ 2011-09-20 01:11 Staginner 阅读(372) 评论(0) 推荐(0)