Fancy Mouse
- -|||
摘要: 基本思路是把每一个字符(1或0)看作一棵2叉树的叶结点,然后一层一层向上合并。合并规则是:如果两个都是"A",那合并为"A";两个都是"B"则合并为"B";否则就是"C"然后追加这两个字符串 在实现的过程中可以用一个队列来代替。初始化的时候把所有字符当作字符串塞进去,然后每次取出两个,处理后塞进去一个。可以证明,由于基因编码长度为2^k,因此每次取出的两个对应的原基因编码长度必定相等(就是不存在跨... 阅读全文
posted @ 2005-10-22 02:18 Fancy Mouse 阅读(336) 评论(1) 推荐(0)
摘要: 这题略带一些技巧。注意有5因子的数的处理。可以发现乘一个5与乘一个8的效果相同。于是我们对于每一个含有5因子的数在乘的时候做一下处理即可~ #includeusing namespace std;const int N = 101;const int a[10] = {1,1,2,6,4,4,4,8,4,6};int Positive(int n[N]);void DivideFive(int n... 阅读全文
posted @ 2005-10-22 02:09 Fancy Mouse 阅读(322) 评论(1) 推荐(0)
摘要: 两条航线交叉的充要条件是x1>x2,y1using namespace std;const int MaxN = 2004;typedef struct harbor{int A,B;}harbor;void Sort(harbor s[MaxN],int harbors);int main(){ harbor s[MaxN]; int DP[MaxN]; int harbors... 阅读全文
posted @ 2005-10-22 01:56 Fancy Mouse 阅读(285) 评论(1) 推荐(0)
摘要: 只要两个数加法不产生进位就能满足题意。对于首位来说,可以有8*9/2=36种选数方式(因为首位不为0),对于其他位来说,可以有9*10/2=55种选数方式,乘法原理以后,剩下来的就是大数乘法和输出了。 #includeusing namespace std;const int MAX = 100;class Num{public: Num(int n); Num operator *(... 阅读全文
posted @ 2005-10-22 01:50 Fancy Mouse 阅读(285) 评论(1) 推荐(0)
摘要: 要注意该函数mod7的余数一定是循环的。设法求出循环节长度,并且保留一个完整的循环节,程序接下来就没问题了~ #includeusing namespace std;const int N = 7;int loop;int f[55];void sFibonacci(int a,int b);int sFibonacci(long n);int main(){ int a,b; lon... 阅读全文
posted @ 2005-10-22 01:46 Fancy Mouse 阅读(305) 评论(1) 推荐(0)
摘要: 这题……noip普及组原题的数据规模1000,太简单了。这里被弄到了3000000……从oi到oj的提升哈~先要解决算法的问题。很容易得出f(x)的递推式f(0)+f(1)+f(2)+...+f(x/2)。但是,如果就照这个算的话,tle~~O(n^2)的复杂度,对于3000000的数据,能在1秒出解就……于是要换个思路。我们计s(x)=f(0)+f(1)+...+f(x)。这样,f(x)=s(x... 阅读全文
posted @ 2005-10-22 01:42 Fancy Mouse 阅读(364) 评论(1) 推荐(0)
摘要: 典型的DP,开一个数组,第i个元素记录原字符串中以第i个字符结束的最小划分数。d[i] = min{d[j] + 1},0#includeusing namespace std;const int MaxString = 256;class Dictionary{public: Dictionary(int word); int Find(char* word,int length);... 阅读全文
posted @ 2005-10-22 01:29 Fancy Mouse 阅读(392) 评论(1) 推荐(0)
摘要: 寻找四塔函数g(x)的递推式。我们将普通的3塔,即Hanoi塔问题的函数式记作f(x),易得f(x)=2^x-1。我们设一开始把x块东西中的a块放到第二个柱子上,这步用了g(a)次,然后,接下来x-a块放到第四个柱子上,由于只有3个柱子可以用,因此这步用了f(x-a)次。然后再把a块移过去用了g(a),所以总共消耗2*g(a)+f(x-a),所以g(x) = min{2*g(a)+f(x-a)},... 阅读全文
posted @ 2005-10-22 01:17 Fancy Mouse 阅读(299) 评论(1) 推荐(0)
摘要: DFS(深搜),注意优化一下剪枝和求最小未使用数这两部分的代码就行了。 #includeusing namespace std;int PrimeList[50];int board[100];int NumUsed[101],MinNum;int size;void Solve();int Acceptable(int k,int cur);int IsPrime(int k);int mai... 阅读全文
posted @ 2005-10-21 22:46 Fancy Mouse 阅读(413) 评论(1) 推荐(0)
摘要: 没错,看懂题目即可 #include#includeusing namespace std;#define YES {cout>n) { flag1=1;flag2=0;m=(long)sqrt((double)n); for(temp=2;temp<=m;temp++) if(n % temp == 0) {flag1... 阅读全文
posted @ 2005-10-05 02:17 Fancy Mouse 阅读(308) 评论(1) 推荐(0)