2011年7月4日

sicily 1221. 数字游戏

摘要: //m个回合里,每个回合在n个数中选择一个ai,然后剩下的数都减去bi,求选中的ai之和的最大值//0-1背包,每个数的体积都为1,背包容量为 m //显然,如果选中的m个数已固定的话,擦去这m个数的顺序对结果有影响,很明显为最大化,应该先擦掉bi小的数,//所以事先要排好序,按bi从大到小排,靠后dp选中的数bi较小#include<iostream> //0-1背包#include<algorithm>using namespace std;struct node{ int a,b;}ans[202];bool cmp(const node& x,const 阅读全文

posted @ 2011-07-04 21:02 sysu_mjc 阅读(300) 评论(0) 推荐(0) 编辑

sicily 1034. Forest

摘要: /* 题意:有n个结点,有m条边A->B,判断是不是森林, 如果一结点有两个结点以上同时指向它,即它的入度>1, 或者有环 , 即没有根节点,则不是森林, 若是森林的话,则输出它的深度和宽度, 宽度是指结点数最多的那一层*/#include<iostream> // 求森林深度和宽度 #include<stdio.h>#include<cstring>#include <algorithm>using namespace std;#define maxn 120int g[maxn][maxn]; int in[maxn],heigh 阅读全文

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

sicily 1031. Campus

摘要: #include<iostream> #include<vector> #include<map> #include<queue> #include<string> #include<cstring> using namespace std; const int MAXN = 205; const int INF = 1000000; int dis[MAXN]; int n;//结点数量 typedef pair<int,int> pii; struct edge//建立边的结构体 { int v; //v表 阅读全文

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

sicily 1027. MJ, Nowhere to Hide

摘要: #include <iostream>#include <string>using namespace std;int main(){ int n,i,j,k;int temp;int is[20],suc1[10],suc2[10]; string str1[20],str2[20];cin>>n; do { for(i=0;i<n;i++) cin>>str1[i]>>str2[i]; for(i=0;i<n;i++)is[i]=0; k=0; for(i=0;i<n;i++) { if(is[i])contin 阅读全文

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

sicily 1021. Couples

摘要: #include<iostream>#include<stack>#include<map>#include<stdio.h>using namespace std;int main(){ int n, m1,m2,k; while(scanf("%d",&n)&&n) { map<int,int> m; stack<int> c; for(int i=0;i<n;i++) { scanf("%d%d",&m1,&m2); m[m1]=m 阅读全文

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

sicily 1007. To and Fro

摘要: #include<iostream>#include<stdio.h>using namespace std;int main(){ int column,row,length,i,time; char ch,list[100][20]; while(scanf("%d",&column),column) { scanf("\n"); length=i=0; while(scanf("%c",&ch),ch!='\n') { length++; list[(length-1)/c 阅读全文

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

sicily 1006. Team Rankings

摘要: //先用table[200]存储“ABCDE”到“EDCBA”所有的排列,计算每个的逆序数//比如“CDEAB”,"CA"是逆序数,则标记num[64][2]=1,其中64表示在全排列中的位置,而2的运算如下://e=table[i][j]-'A';f=table[i][k]-'A';if(e>f)num[i][e+f*5]=1;//在该例中,e=2;f=0;所以e+f*5=2;可以看出最大逆序值是"ED",e=4;f=3;则e+f*5=19;//故逆序值散落在[1,19]范围内;//接着输入n个字符串,同样地计算出 阅读全文

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

sicily 1011. Lenny's Lucky Lotto

摘要: #include<iostream> //AC#include<cstring>#include<stdio.h>using namespace std;long long dp[12][2002],s; //这里要注意是长整形 int main(){ int t,n,m; cin>>t; for(int id=1;id<=t;++id) { cin>>n>>m; memset(dp,0,sizeof(dp)); fill(dp[1]+1,dp[1]+m+1,1); for(int i=2;i<=n;++i) 阅读全文

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

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 阅读(173) 评论(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 阅读(363) 评论(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 阅读(248) 评论(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 阅读(924) 评论(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 阅读(485) 评论(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 阅读(132) 评论(0) 推荐(0) 编辑

sicily 1022. Poor contestant Prob

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

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

poj 1363. rails

摘要: 模拟题 阅读全文

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

poj 3481 Double Queue

摘要: #include<iostream> //随时插入数据并删除最低(高)优先级的数据#include <map>using namespace std;int main(){ map<int,int> col; map<int,int>::iterator ite; int op,k,p; while(scanf("%d",&op)&&op) { if(op==1) { scanf("%d%d",&k,&p); col[p]=k; } else if(o... 阅读全文

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

导航