摘要:暴力+剪枝,或者使用随机化算法,因为结果总是在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 }...
阅读全文
摘要:原题转化为求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;
阅读全文
摘要:数学,数值计算,求期望题目链接: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
阅读全文
摘要:先预处理出所有的数是不是可能拿来用,我的想法是记录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 ...
阅读全文
摘要:下面是别人解题报告的链接,很详细,写的很好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...
阅读全文
摘要:注意细节,就是名字是左对齐,其余两项是右对齐,然后名字和题目数中间有一个空格,题目数和时间之间有一个空格。做了一两个小时,弱暴了`````不过也有点收获,看到了以前学C时没有怎么注意到的,有个头文件叫ctype.h,里面有函数isalpha(c),isdigit(c)各种处理字符的函数,以前看到过,很久不用就忘了,还是得学了多用才行。。。不过自己写一下也没什么太大的关系````还有就是左对齐得加个“ - ” ,也忘了````贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algo
阅读全文
摘要:贴代码: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...
阅读全文
摘要:这个题的关键是看清楚题意,我就没看懂题再瞎写,直接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 ...
阅读全文
摘要: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的数中取最大的,如果加起来&
阅读全文