2011年7月4日

sicily 1001. Alphacode

摘要: #include<iostream>#include<cstring>#include<string>using namespace std;int arr[10000],len,ans[10000];int dp(int id){ if(ans[id]!=-1) return ans[id]; int s; if(id==len) s=1; else if(id==len-1) s=arr[id]>0?1:0; else if(arr[id]==0) s=0; else if(10*arr[id]+arr[id+1]<=26) s=dp(id+ 阅读全文

posted @ 2011-07-04 18:25 sysu_mjc 阅读(175) 评论(0) 推荐(0) 编辑

sicily 1012. Stacking Cylinders

摘要: //纯计算题,三角形内,已知两点坐标A(x1,y1),B(x2,y2),求第三点的坐标C(x3,y3),其中顶点A,B到C距离都为2//由 (x3-x1)^2+(y3-y1)^2=4 和 (x3-x2)^2+(y3-y2)^2=4 //可得 2(x2-x1)*x3+2(y2-y1)*y3=x2^2-x1^2+y2^2-y1^2 (1)//设A,B距离为L,则顶点C到直线AB的距离 H=2*sin<CAB=2*√(1-L^2/16) //再应用点( x0,y0)到直线ax+by+c=0 的距离公式 |ax0+by0+c|/√(a^2+b^2)//可得 H=| 1/(x2-x1) *x3 - 阅读全文

posted @ 2011-07-04 18:17 sysu_mjc 阅读(288) 评论(0) 推荐(0) 编辑

sicily 1564. HOUSING

摘要: /*题意: 对一个数(5<=n<=100)分解成几个因子之和,因子数目不限,但必须不小于5,求有多少种组合方案比如 m(17)=7 ,即 17=17, 5+12, 6+11, 7+10, 8+9, 5+5+7, 5+6+6, 而 5+5+6, 5+6+5, 6+5+5 看作是一样的为避免重复,我们可以规定因子的序列是不下降的,用 dp[i][j] 来表示对 i 分解且第一个因子为 j 的全部组合方案。分情况:(1) i 分解成只有一个因子,即 j=i,当然方案数是 1 (2) i 分解成一个因子以上, 其中 5 <= j <= i/2 ,那么余下的序列可以表示成 dp[ 阅读全文

posted @ 2011-07-04 14:04 sysu_mjc 阅读(226) 评论(0) 推荐(0) 编辑

sicily 1017. Rate of Return

摘要: //求解一元多次方程,注意到"the interest rate will be no less than 0 and no larger than 1."//所以方程的输出是随着the value of i 严格增加,故可以采用二分查找方程的解#include<iostream> #include<stdio.h>#include<math.h>using namespace std;double fac[20],power[20],s,month;int main(){ int n,id=1; while(cin>>n&a 阅读全文

posted @ 2011-07-04 12:23 sysu_mjc 阅读(364) 评论(0) 推荐(0) 编辑

sicily 1010. Zipper

摘要: //给出三个字符串,判断第三个字符串是否可以由前两个字符串组成,//注意前两个字符串中的字母在新组成的字符串中的顺序和在原来字符串中的顺序一样.#include <iostream>#include<stdio.h>#include<cstring>using namespace std;char s1[210],s2[210],goal[410];int f[210][210]; //记录状态//f[i][j]有三种可能取值,-1表示初始化,即不清楚能否匹配成功,0表示匹配不成功,1表示匹配成功bool match(int i,int j) //判断s1的 阅读全文

posted @ 2011-07-04 12:15 sysu_mjc 阅读(251) 评论(0) 推荐(0) 编辑

sicily 1009. Mersenne Composite N

摘要: //给一个数k,对小于k的素数,若2^k -1 的值是合数的话,求出它的质因子#include<iostream>#include<cmath>using namespace std;int p[10]={11,23,29,37,41,43,47,53,59}; //61也是素数,但计算这一项会超时,而且它也不是答案,所以猥琐地把它删掉了。。int main(){ int k; long long n,m,fac[10]; cin>>k; for(int i=0;i<=8&&p[i]<=k;++i) { n=(long long) 阅读全文

posted @ 2011-07-04 12:09 sysu_mjc 阅读(925) 评论(0) 推荐(0) 编辑

sicily 1028. Hanoi Tower Sequence

摘要: //从原序列中可以找出规律来:1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 。。。//可以看出:第2位是2,第4位是3,第8位是4,第16位是5,数字 k 第一次出现的位置是 2^(k-1)//而且由于对称性,假若 k>8 且 k<16, 那么结果与 k-8 是相同的。//当k=12时,即相当于k=12-8= 4 ,所以 1100 与 100 是一样的结果//故我们只需找到该数的二进制表示的“1”出现的最低位//把输入的十进制数转化成二进制数,从最低位开始,出现的第一个‘1’,该位的位置即为答案。//比如100=2^2+2^5+2^6= 阅读全文

posted @ 2011-07-04 11:08 sysu_mjc 阅读(486) 评论(0) 推荐(0) 编辑

sicily 1004. I Conduit!

摘要: //给出各线段的起点和终点,如果两条线段在同一直线上且有重合部分(包括一个点)则可以合并成一条线段,//问最后剩多少条线段//对线段(x1,y1)-(x2,y2)转化成 y=kx+b 形式,进行排序,按照 k 升序排序,如果 k 值相等,则按 b 值升序排序,//如果 k,b都相等,则按 x1 升序排序,若 x1 还相等的话,则按 y1 升序排序。//要对 平行于 y轴,即斜率不存在的线段 加以判断,//先按照 b 值(b=x1)升序排序,再按 y1 升序排序,最后按 y2 升序排序#include<iostream>#include<algorithm>#includ 阅读全文

posted @ 2011-07-04 11:05 sysu_mjc 阅读(510) 评论(0) 推荐(0) 编辑

STL堆之一

摘要: #include <iostream>#include <algorithm>using namespace std;int main () { int myints[] = {10,20,30,5,15},len=sizeof(myints)/sizeof(myints[0]); make_heap(myints,myints+len); cout << "initial max heap : "; for(int i=0;i<len;i++) cout<<myints[i]<<" "; 阅读全文

posted @ 2011-07-04 10:51 sysu_mjc 阅读(133) 评论(0) 推荐(0) 编辑

sicily 1022. Poor contestant Prob

摘要: 用大顶堆和小顶堆来求中间值 阅读全文

posted @ 2011-07-04 09:42 sysu_mjc 阅读(368) 评论(0) 推荐(0) 编辑

导航