上一页 1 ··· 32 33 34 35 36 37 38 39 40 ··· 54 下一页

2012年1月26日

BOJ 170 Fake Coins

摘要: 题目地址http://acm.bupt.edu.cn/onlinejudge/newoj/showProblem/show_problem.php?problem_id=170这个题用到信息论里的几个概念。信息量、熵(不会的百度一下)假币可轻可重,每枚硬币都可能是假币。故此问题共有2*n种情况,每种情况的概率为1/(2*n)。所以此问题的熵为log(2*n)/log2。实验最多可能出现三种结果 ,根据最大熵原理,这种实验在可能出现的各种事件具有相等的概率时,所提供的平均信息量最大,故实验提供的平均信息量不超过log3/log2。设最少需称k次,则这k次实验提供的总信息量不超过k * log3/ 阅读全文

posted @ 2012-01-26 12:59 c语言源码 阅读(220) 评论(0) 推荐(0) 编辑

2012年1月25日

HDU 3573 Buy Sticks 贪心

摘要: 很简单一题,见代码#include<stdio.h> #include<stdlib.h> #include<math.h> using namespace std; int min(int a,int b){ return a<b?a:b; } int main(){ int t,T; int a,b,c; scanf("%d",&T); int sum; for(t=1;t<=T;t++){ sum=0; scanf("%d %d %d",&a,&... 阅读全文

posted @ 2012-01-25 22:03 c语言源码 阅读(148) 评论(0) 推荐(0) 编辑

HDU 3979 Monster 贪心策略

摘要: 听戴牛讲完这题体会了排序不等式在贪心中的作用这个题说的是后很多怪兽同时攻击一个游侠,怪兽有不同的血量和攻击力。游侠有一个攻击力,如果选择攻击怪兽的顺序使得游侠扣血最少贪心构造:对于2只怪兽,A,B;假设当前怪兽总攻击值为V。设怪兽A的攻击力,和被攻击次数(攻击多少次死亡) 为 GA,CA;设怪兽B的攻击力,和被攻击次数(攻击多少次死亡) 为 GB,CB;可知,如果先攻击怪兽A,后攻击怪兽B ,那么游侠的去血量分别为正在杀怪兽A :V *CA ,怪兽A死亡后,正在杀怪兽B :(V-GA) * CB ;杀完两只怪兽的去血总量为 SUM1 = V *CA + (V-GA) * CB; 同理,先攻击怪 阅读全文

posted @ 2012-01-25 21:25 c语言源码 阅读(263) 评论(0) 推荐(0) 编辑

POJ 3067 Sudoku DLX

摘要: 和POJ 3074一样#include<cstdio> #define inf 1e8 #define M 16*16*16*16*16*4+100 #define N 16*16*16+100 int U[M],D[M],L[M],R[M],C[M],X[M];//x代表M所属的行,c代表M所属的列,U,D,L,R为一个元素的上下左右指针 int H[N],S[N],Q[N];//H是水平循环链表的头指针,S代表每一列的元素个数,Q存储一个可能结果 char map[20][20]; int size; void remove(int c) { R[L[c]]=R[c],L[R[ 阅读全文

posted @ 2012-01-25 17:51 c语言源码 阅读(221) 评论(0) 推荐(0) 编辑

POJ 3074 Sudoku DLX

摘要: 建图还是坑了我一下午。。。。终于把数独搞定了(囧)具体细节我加了注释#include<cstdio> #define inf 1e8 #define M 9*9*9*9*9*4+100 #define N 9*9*9+100 int U[M],D[M],L[M],R[M],C[M],X[M];//x代表M所属的行,c代表M所属的列,U,D,L,R为一个元素的上下左右指针 int H[N],S[N],Q[N];//H是水平循环链表的头指针,S代表每一列的元素个数,Q存储一个可能结果 char map[100]; bool v[N]; int size; void remove(int 阅读全文

posted @ 2012-01-25 17:27 c语言源码 阅读(193) 评论(0) 推荐(0) 编辑

Codeforces Round #104 (Div. 2) E - Lucky Subsequence

摘要: 这个题其实就是个dp(类似背包),但是一些细节还是让我做了一晚上。这个题学习了组合数取模(逆元法)补充知识:逆元的求法(a/b) mod p=a*(b逆) mod pb*x=1(mod p) x就是b的逆元而b逆可以利用扩展欧几里德或欧拉函数求得:1).扩展欧几里德:b*x+p*y=1 有解,x就是所求2).欧拉函数:b^(p-1)=1(mod p),故b*b^(p-2)=1(mod p),所以x=b^(p-2)#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm 阅读全文

posted @ 2012-01-25 00:37 c语言源码 阅读(265) 评论(0) 推荐(0) 编辑

2012年1月24日

Codeforces Round #104 (Div. 2) D. Lucky Number 2 模拟策略

摘要: 给出我自己的证明:不可能出现fabs(a47-a74)>1。首先把所有的4排成一排,如果在队首前插入7,则无论插几个只多一个a74;如果在队尾后插入7,则无论插几个只多一个a47,;而在两个4中间插7,不管插几个,a47与a74都同等的只增加一个。故得证。#include<stdio.h> #include<math.h> #include<stdlib.h> int max(int a,int b){ return a>b?a:b; } int min(int a,int b){ return a>b?b:a; } int main(){ 阅读全文

posted @ 2012-01-24 14:32 c语言源码 阅读(182) 评论(0) 推荐(0) 编辑

2012年1月23日

USTC 1281 Unhappy dots STL map

摘要: 这题被set坑了,问了问戴牛原来multiset的count 复杂度很大,是logn+o(元素个数),所以我悲剧的一直TLE啊(除夕夜就这么悲剧....)其实是用map#include<stdio.h> #include<utility> #include<map> #include<string.h> using namespace std; int x[100005],y[100005]; int visit[100005]; int h[5]={1,-1,0,0,0}; int g[5]={0,0,1,-1,0}; int main(){ 阅读全文

posted @ 2012-01-23 22:36 c语言源码 阅读(298) 评论(0) 推荐(0) 编辑

HDU 4022 Bombing STL/二分

摘要: 用stl的set和map#include<cstdio> #include<cstring> #include<string> #include<iostream> #include<algorithm> #include<map> #include<set> #include<iterator> using namespace std; typedef map<int,multiset<int> > def; void pop(def &a,def &b,i 阅读全文

posted @ 2012-01-23 20:59 c语言源码 阅读(149) 评论(0) 推荐(0) 编辑

2012年1月21日

POJ 2796 Feel Good 单调栈

摘要: 最近做这方面的题很多,感觉单调栈很是神奇,通过维护一个单调不减的栈,遇到小于栈顶的栈顶元素便出栈,此时跟新结果。这个比RMQ的ST算法要快很多,ST算法要枚举每一个区间(没想到其他做法,可能要dp,反正不会)。这个题关键在于给每一个点找一个最长子序列,使其最小值为其本身,这样扫一遍得到结果。而单调栈正好可以解决这个问题。(这个题大家注意要用long long我被int卡死,干脆全换long long了.......)#include<stdio.h> #include<stdlib.h> #include<algorithm> #include<str 阅读全文

posted @ 2012-01-21 16:10 c语言源码 阅读(378) 评论(0) 推荐(0) 编辑

上一页 1 ··· 32 33 34 35 36 37 38 39 40 ··· 54 下一页

导航