随笔分类 -  水题

杭电 4712 汉明距
摘要:暴力+剪枝,或者使用随机化算法,因为结果总是在0-20之间,所以任选两个求汉明距,它不是最终结果的概率应该不超过19/20,当随机生成10^5组数据时,求出的最小值不是最终结果的概率非常低。同时当结果为0或者1时能较快的判断出来,可以特判这两种情况。我的加了特判的代码: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int N = 100005; 7 int a[N],n; 8 bool vis[(1 tmp) ans = tmp;35 }36 return ans;37 }... 阅读全文

posted @ 2013-09-10 16:41 allh123 阅读(216) 评论(0) 推荐(0)

HDU 4473 Exam 枚举
摘要:原题转化为求a*b*c 的选法数。令a=i时,t = i这一种要删除,因为t = i则三个数都相等了,这种选法有3种,所以ans += 3*(t-1).ta,剩下的数的最大值s = n/(a*b),如果s b,则ans += 6*(s - b ).分类讨论时要不重复,不遗漏······贴代码: 1 #include 2 typedef long long int LL; 3 int main() 4 { 5 // freopen("in.txt","r",stdin); 6 LL n,ans; 阅读全文

posted @ 2013-09-02 15:12 allh123 阅读(217) 评论(0) 推荐(0)

HDU 4465 数值计算,避免溢出
摘要:数学,数值计算,求期望题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4465题目描述:有两个盒子,每个中有n个糖果,(n<10^5)每次任选一个盒子,如果有糖就吃掉,没糖就去开另一个盒子。选中盒子1的概率为p,选中盒子2的概率为1-p.问当发现一个盒子里没有糖时,另一个盒子中糖果的个数的数学期望。解法:利用数学期望的定义,结果一共为x = 0,1,2,```,n.如果知道p(x),求sum(x*p(x))即可。为方便计算,设吃掉了i个糖果时发现盒子空。则有x = 2*n-i时,p[x] = C(i,n)*[p^(n+1)*q^(i-n)+q 阅读全文

posted @ 2013-08-31 17:12 allh123 阅读(233) 评论(0) 推荐(0)

水题 不要62 HDU 2089
摘要:先预处理出所有的数是不是可能拿来用,我的想法是记录1-i这个区间内可用的数为s[i].输入a,b.答案就为s[b] - s[a-1].贴代码: 1 #include 2 #define N 1000010 3 int sum[N]; 4 bool check(int x) 5 { 6 while(x) 7 { 8 int t = x%10; 9 if(t == 4) return false;10 if( t == 2 && (x/10%10) == 6) return false;11 x /= 10;12 ... 阅读全文

posted @ 2013-08-17 21:09 allh123 阅读(122) 评论(0) 推荐(0)

HDU 2108 逆时针给出多边形的顶点,判断是否为凸多边形,水题
摘要:下面是别人解题报告的链接,很详细,写的很好http://blog.csdn.net/chl_3205/article/details/8520597下面贴我的代码 1 #include 2 struct point 3 { 4 int x,y; 5 } p[100005]; 6 bool checkDir(point p0,point p1,point p2) 7 { 8 if((p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y) * (p2.x-p0.x) > 0) 9 return true;10 else return fals... 阅读全文

posted @ 2013-08-02 19:04 allh123 阅读(364) 评论(0) 推荐(0)

HDU 2093 水题,就是注意一下细节,有个结构体的排序,重载运算符小于
摘要:注意细节,就是名字是左对齐,其余两项是右对齐,然后名字和题目数中间有一个空格,题目数和时间之间有一个空格。做了一两个小时,弱暴了`````不过也有点收获,看到了以前学C时没有怎么注意到的,有个头文件叫ctype.h,里面有函数isalpha(c),isdigit(c)各种处理字符的函数,以前看到过,很久不用就忘了,还是得学了多用才行。。。不过自己写一下也没什么太大的关系````还有就是左对齐得加个“ - ” ,也忘了````贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algo 阅读全文

posted @ 2013-04-25 00:55 allh123 阅读(427) 评论(0) 推荐(0)

ZOJ 1084 贪心 给顶点染色,相邻顶点不能染同样的颜色 算法有问题不能保证是最优解但能A
摘要:贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 30 4 int n; 5 bool edge[MAXN][MAXN]; 6 int color() 7 { 8 int vet[MAXN]; 9 int c[MAXN];10 int i,j;11 memset(vet,0xff,sizeof(vet));12 for( i=0; i<n; ++i)13 {14 memset(c,0,sizeof(c));15 for( j... 阅读全文

posted @ 2013-04-10 23:27 allh123 阅读(249) 评论(0) 推荐(0)

ZOJ 3693 Happy Great BG
摘要:这个题的关键是看清楚题意,我就没看懂题再瞎写,直接n= n+2,n = n-n/k, 这些人是要付钱的,然后,重点来了,在结果上加10^-10才能A,不然就是WA,不明白为什么,求高手解释计算机如何处理浮点数!追加的:这题貌似不是什么浮点数怪,也许只是不要四舍五入,而是直接进1,比如,2.341,就要付2.35元,所以在算得的结果后加一个0.009就能过,但是rounded不是四舍五入吗?????应该是这题出的不太正常贴代码:View Code 1 #include <cstdio> 2 int main() 3 { 4 int n,k; 5 double w; 6 ... 阅读全文

posted @ 2013-04-01 20:38 allh123 阅读(202) 评论(0) 推荐(0)

HDU 4379 水题,大水,但我WA了很多次,做了很久
摘要:http://blog.csdn.net/diannaok/article/details/7875086?reload我是看着他的写的,但是有个小错误,在初始化值时,令>L/2中最大的数的初始值为L+1较为合适,想想1 3 3 1 4这组测试数据。这题我再详细说一下,我们试想在子集中最大的那个数怎么取,如果取<=M/2那么所有<=M/2的数一定都可以取,但是如果取一个>M/2的数的话,那么该子集只能取一个>M/2的数,取两个的话不就不满足yi+yj <= L了嘛,如此说来,就在>M/2的数中取一个最小的,在<=M/2的数中取最大的,如果加起来& 阅读全文

posted @ 2013-03-28 20:26 allh123 阅读(247) 评论(0) 推荐(0)

导航